对象中对象的 Javascript 原型(prototype)继承

标签 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”原型(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/

相关文章:

javascript - html中<script>标签的async ="async"属性,这是什么意思?

javascript - "Segmentize"与 lodash 的集合

java - 我想在对象数组的对象中打印一个方法,但不能。为什么?

javascript - 使用 Three.js 组织 html5 webgl canvas 动画中的对象

java - 将对象添加到对象数组中

javascript - for (var o in this) 在对象内部

python - Pytest 在派生类中生成测试

C++ 类继承和赋值运算符

java - 核心 Java 库中继承的最佳示例是什么?

javascript - Chrome Canary 29 中的弹出窗口?