繁体   English   中英

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

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

我用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的值吗? 现在,如果我将this.obj的定义更改为:

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对于每个构造对象都是不同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM