在已用于创建对象的情况下修改构造函数定义时,对象属性是否被覆盖,就好像该对象是自己重新创建的一样?类似于原型链如何在修改原型时使方法保持更新。
function ParentFunction(a){
this.a = a;
this.method = function(){console.log(this.name);}
}
var parent = {};
parent.__proto__ = ParentFunction.prototype;
ParentFunction.call(parent,1);
//child linking
var child = {};
child.__proto__ = parent; // child now has a and method
// changing parent constructor
parent.__proto__.constructor = function ParentFunction(a){
this.a = a;
this.method = function(){console.log("new");}
}
// this does not change child.method function. why not?
答案 0 :(得分:1)
请勿使用已被弃用的 proto ,请将原型与Object.create结合使用,例如:
SomeClass.prototype = Object.create(SomeOtherClass.prototype);
不要将方法放入构造函数中。这样,将为每个实例创建该方法。将该方法放在原型上,以便成员可以共享它。
SomeClass.prototype.someMethod = () => {...}
关于您的问题,已经在其中一条评论中得到了回答。
答案 1 :(得分:0)
如果要为某个类型的所有实例更改方法,则不要使用构造函数将方法附加到对象的实例,请将其附加到原型。
function Obj() {
this.x = 5;
}
Obj.prototype.method = function () {
console.log(`Original method displays the value of x: ${this.x}`);
}
let instance = new Obj();
instance.method();
Obj.prototype.method = function () {
console.log(`New method displays the value of x times 2: ${this.x * 2}`);
}
instance.method();