function classA(){};
classA.prototype.age =25;
var obj = new classA();
console.log(obj.age) //returns 25
现在,当我这样做时:
classA.prototype = {};
为什么obj.age
仍在返回25
?
答案 0 :(得分:1)
这种情况正在发生,因为您将classA.prototype
指向新对象,但您没有更改obj.prototype
指向的对象。
发生的事情是:
classA.prototype ------> A
// create object with new classA()
// now its prototype also points to A
obj.prototype ------> A // points to the same prototype
现在您重新设置classA
classA.prototype ------> B
但obj
的原型仍然指向A
(它从未改变过)
obj.prototype ------> A
所以你所做的就是在{/ 1}} {/ 1}}的原型参考已经建立之后更改classA
的原型参考。
如果您希望obj
看到原型上的更改,那么会更改它引用的对象(上例中的obj
)而不是引用本身:
示例代码:
A

答案 1 :(得分:0)
如果您的代码符合以下顺序:
function classA(){};
classA.prototype.age = 25;
classA.prototype = {};
var obj = new classA();
console.log(obj.age) // returns undefined
结果将是您的例外行为。这取决于您何时设置classA函数的原型。这将通过以下代码片段进行演示:
function classA(){};
classA.prototype.age = 25;
var obj1 = new classA();
classA.prototype = {};
var obj2 = new classA();
console.log(obj1.age) // returns 25
console.log(obj2.age) // returns undefined
因此,object
仅受函数prototype
的更改影响,而这在object's
创建之前发生。
答案 2 :(得分:0)
在创建对象后重新分配prototype
对先前创建的对象没有影响,它在创建时仍然具有旧prototype
。新prototye
只会影响新创建的对象