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

时间:2016-12-04 12:32:27

标签: javascript object inheritance prototype

我很难理解这一点,甚至在互联网上摸索。这是我在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的帮助(谢谢)并且重复了一遍。但是我仍然认为我通过这种行为丢失了一个资源,并想知道为什么它是这样构建的?在处理实例时没有必要更新原型。

1 个答案:

答案 0 :(得分:1)

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

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

这将输出您想要的内容。

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);

希望这有帮助。