Javascript原型与对象中的对象的继承

奥迪斯

我很难理解这一点,甚至在互联网上四处摸索。这是我在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的帮助(谢谢),并且得到了一份副本。但是我仍然认为我因这种行为而浪费了资源,并且想知道为什么要这样构建资源?在实例上工作时,无需更新原型。

迈科拉·鲍里修克(Mykola Borysyuk)

在所有实例的原型继承中添加方法和属性。因此,当您更改原型对象中的值时,将为所有实例更改此值。

为了解决这个问题。您需要在构造函数中设置值,因此它将为每个实例初始化不同的值。

这将输出您想要的。

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章