我很难理解这一点,甚至在网上摸索。这是我在 javscript 中的片段:
TEST=function(){};
TEST.prototype={
b:{
b1:"",
b2:{}
}
};
//Instance 1
var first=new TEST();
first.b.b1="TEXT";
//Instance 2
var second=new TEST();
console.log("Result",second.b.b1);
控制台日志将输出“TEXT”,我想要“”。所以我想知道为什么我会得到这个结果,以及为什么它会在创建新实例然后设置值时更改“TEST”原型(prototype)(这是我的主要问题)?
我得到了 Bergi 和 Mykola 的帮助(谢谢)和一份副本。但我仍然认为我通过这种行为丢失了资源,并想知道为什么它是这样构建的?在实例上工作时不需要更新原型(prototype)。
最佳答案
在原型(prototype)中添加的方法和属性会为所有实例继承。因此,当您更改原型(prototype)对象中的值时,您会更改所有实例的值。
为了解决这个问题。您需要在构造函数中设置值,因此它会为每个实例初始化不同的值。
这将输出你想要的内容。
TEST=function(){
this.b ={
b1:"",
b2:{}
}
};
TEST.prototype.forAll = "im global";
//Instance 1
var first=new TEST();
first.b.b1="TEXT";
//Instance 2
var second=new TEST();
console.log("Second",second.b.b1, second.forAll);
console.log("First",first.b.b1, first.forAll);
希望这有帮助。
关于对象中对象的 Javascript 原型(prototype)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40958649/