我很难理解这一点,甚至在互联网上四处摸索。这是我在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”原型(这是我的主要问题)?
我得到了Bergi和Mykola的帮助(谢谢),并且得到了一份副本。但是我仍然认为我因这种行为而浪费了资源,并且想知道为什么要这样构建资源?在实例上工作时,无需更新原型。
在所有实例的原型继承中添加方法和属性。因此,当您更改原型对象中的值时,将为所有实例更改此值。
为了解决这个问题。您需要在构造函数中设置值,因此它将为每个实例初始化不同的值。
这将输出您想要的。
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);
希望这可以帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句