设置Javascript类的对象,然后改变它以某种方式改变所有实例的对象

Setting Object of Javascript Class and then changing it somehow changes the object of all Instances

本文关键字:对象 改变 方式 实例 Javascript 然后 设置      更新时间:2023-09-26

我用Node.JS写一个项目,奇怪的事情发生了。不知何故,如果我调用test1.changeObjName()它改变了该类的所有实例的值:

var myObj = {"name":"test"};
var myClass = function(){
    this.obj = myObj;
    this.changeObjName = function(){
        this.obj.name ="newValue";   
    };
};  
var test1 = new myClass();
var test2 = new myClass();
test1.changeObjName();
console.log(test1.obj.name); //returns "newValue"
console.log(test2.obj.name); //returns "newValue"

为什么test1.changeObjName();也改变了test2.obj.name的值?现在如果我改变它的定义。

var myClass = function(){
    this.obj = {"name":"test"};
    this.changeObjName = function(){
        this.obj.name ="newValue";   
    };
};  
var test1 = new myClass();
var test2 = new myClass();
test1.changeObjName();
console.log(test1.obj.name); //returns "newValue"
console.log(test2.obj.name); //returns "test"

它工作如我所料。这里有什么不同?

他们都有相同的this.obj当你做:

this.obj = myObj

注意,这只是获取外部对象的引用,通过构造函数的每次赋值(即当您初始化类时)都将跟踪外部对象。所以每个物体都有相同的this.obj,也就是myObj。更重要的是,在实例化下一个对象之前所做的任何更改似乎也已应用于新对象。

在第二个示例中,您为每个实例创建了一个新对象。换句话说,每个this.obj对于每个构造对象都是不同的。