1 回答
TA贡献1784条经验 获得超9个赞
js有变量提升,所以第一段相当于
function A () {
}
function B () {
}
function C () {
}
var aObj;
A.prototype = new B(); // 在设置A的原型对象的时候B的原型对象还是普通的object
A.prototype.constructor = A;
B.prototype = new C();
B.prototype.constructor = B; // 此时B的原型对象才设置成功
// A.prototype = new B(); // 这个时候new的B的原型才是C.prototype
aObj = new A();
console.log(aObj);
Update:
你的疑惑点可能是如果我改变了一个方法的prototype属性,那么原先new的对象会不会自动更新原型对象?
function B () {}
let b = new B()
console.log(b.__proto__ === B.prototype) // true
B.prototype = {} // 改变B的原型
console.log(b.__proto__ === B.prototype) // false,说明原先new的对象不会自动更新原型对象
抽象一下上面的过程,变成以下:
console.log(b.__proto__ === B.prototype) // true
B.prototype = {} // 改变B的原型
console.log(b.__proto__ === B.prototype) // false
简化一下,用c代替b.__proto__,d代替B.prototype:
console.log(c === d) // true
d = {}
console.log(c === d) // false
也就是一开始c和d指向同一个对象,然后使d指向另外一个对象,那么请问此时c是否会自动更新,指向新的对象?
答:为什么会自动更新。
添加回答
举报
