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