function Thing1() {
}
Thing1.prototype.foo = "bar";
function Thing2() {
this.foo = "foo";
}
Thing2.prototype = new Thing1();
function Thing3() {
}
Thing3.prototype = new Thing2();
var thing = new Thing3();
console.log(thing.foo); //logs "foo"
问:为什么输出的红框内不是Thing2呢?
答1:因为你把原型链链到实例上去了
最关键的一行代码是第二步,你把Thing2的原型链链到thing1(Thing1的实例)上去了
这样你在第三步的时候,就把Thing3的原型链链到thing2的原型(Thing2的prototype)上去了,也就是Thing1
答2:Thing2.prototype = new Thing1()
改成
Thing2.prototype = Object.create(Thing1.prototype)
Thing2.prototype.constructor = Thing2
就是constructor属性指向了Thing1,本来应该指向Thing2的,但是因为你的这个写法Thing2.prototype = new Thing1();
重写了Thing2.prototype,所以constructor改变了,这个问题你可以看看视频的面向对象。专门针对你这个问题的