function A() {} A.prototype.x = 10; var a = new A(); alert(a.x); // 10 A.prototype = { x: 20,y: 30 }; alert(a.y) // undefined
>为什么它委托给旧的原型的a.x而不是较新的
一?
为什么a.y抛出未定义通过它在原型中设置?
解决方法
这是因为你设置了A.prototype = obj
您已经创建了一个全新的对象作为A.prototype,而不是被一个继承者
考虑,
function A() {} A.prototype.x = 10; var p1 = A.prototype; // keep reference to this var a = new A(); A.prototype = {x: 20,y: 30}; Object.getPrototypeOf(a) === A.prototype; // false,not the new prototype Object.getPrototypeOf(a) === p1; // true,the old prototype // however var b = new A(); Object.getPrototypeOf(b) === A.prototype; // true,this is the new prototype