function a () { this.A = 'constructor' } function b () { this.B = 'constructor' } function c () { this.C = 'constructor' } function d () { this.D = 'constructor' }
a.prototype.A = 'prototype' let aa = new a()
b.prototype = aa let bb = new b()
c.prototype = bb let cc = new c()
d.prototype = cc let dd = new d()
aa // a {A: "constructor"} bb // a {B: "constructor"} cc // c {C: "constructor"} dd // d {D: "constructor"}
aa.__proto__ === a.prototype // true bb.__proto__ === aa // true cc.__proto__ === bb // true dd.__proto__ === cc // true
aa.constructor // a bb.constructor // a,注意不是b了 cc.constructor // a dd.constructor // a
aa instanceof a // true bb instanceof a // true bb instanceof b // true cc instanceof a // true cc instanceof b // true cc instanceof c // true ...