Javascript 从原型继承属性
现在,当我这样做的时候:Javascript 从原型继承属性,javascript,object,constructor,prototype,Javascript,Object,Constructor,Prototype,现在,当我这样做的时候: function classA(){}; classA.prototype.age =25; var obj = new classA(); console.log(obj.age) //returns 25 为什么obj.age仍然返回25?发生这种情况是因为您将classA.prototype指向一个新对象,但没有更改obj.prototype指向的对象 正在发生的是: classA.prototype = {}; 现在您重新设计了classA cla
function classA(){};
classA.prototype.age =25;
var obj = new classA();
console.log(obj.age) //returns 25
为什么
obj.age
仍然返回25
?发生这种情况是因为您将classA.prototype
指向一个新对象,但没有更改obj.prototype
指向的对象
正在发生的是:
classA.prototype = {};
现在您重新设计了classA
classA.prototype ------> A
// create object with new classA()
// now its prototype also points to A
obj.prototype ------> A // points to the same prototype
但是obj
的原型仍然指向A
(它从未改变)
因此,您所做的只是在obj
的原型参考已经建立之后更改classA
的原型参考
如果您想让obj
查看原型上的更改,则更改它引用的对象(A
,在上面的示例中),而不是引用本身:
示例代码:
函数classA(){};
classA.prototype.age=25;
var obj=新的classA();
console.log(对象年龄)//25
//更改对象本身,而不是引用
删除classA.prototype.age;
控制台日志(对象年龄);//未定义的
如果代码的顺序如下:
obj.prototype ------> A
结果将确实是你例外的行为。这取决于何时设置classA函数的原型。这将通过以下代码段演示:
function classA(){};
classA.prototype.age = 25;
classA.prototype = {};
var obj = new classA();
console.log(obj.age) // returns undefined
因此,
对象
仅受函数的原型
更改的影响,当这发生在对象
创建之前。在创建对象后重新分配原型
对先前创建的对象没有影响,它在创建时仍将保留旧的原型。新建prototye
只会影响新创建的对象是否有任何方法也可以更改对象的原型?
function classA(){};
classA.prototype.age = 25;
classA.prototype = {};
var obj = new classA();
console.log(obj.age) // returns undefined
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