从原型继承属性

时间:2015-11-13 17:09:57

标签: javascript object constructor prototype

function classA(){}; 

classA.prototype.age =25;

var obj = new classA();

console.log(obj.age)  //returns 25

现在,当我这样做时:

classA.prototype = {};

为什么obj.age仍在返回25

3 个答案:

答案 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只会影响新创建的对象