设置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
的值?现在如果我改变它的定义。
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
对于每个构造对象都是不同的。
相关文章:
- 改变<svg>对象's路径
- 为什么日期对象的时间没有改变?我怎样才能改变它
- 为什么第二个对象的值没有改变
- 触发标准“;改变“;表单对象上的事件-由其上的任何侦听器拾取
- Javascript排序的数组会改变窗口对象,但在遍历它时不会改变
- 为什么函数中改变的对象会改变它们在内存中指向的内容,但有时会创建一个新的内存对象
- 如何将场景中的对象添加到网格中而不改变其在three.js中的位置
- 如何上传JSON文件在Javascript运行时创建对象,而不改变服务器端脚本
- 基于查看区域,使用javascript动态改变html对象中嵌入flash文件的大小
- 如何改变对象's html
- js -如何动态改变对象的不透明度
- 我可以动态地改变'likeable'对象用于Facebook的Like按钮
- 改变JavaScript对象定义样式会导致画布保持空白
- 为什么我的画布对象在setInterval()被调用后不改变颜色?
- 如何使D3js对象改变它的属性,鼠标移动到对象附近
- 为什么我的innerHTML对象没有改变时分配
- 对象的属性在改变时激活功能
- 如何用JSONLoader改变在js中加载的对象的颜色
- 如果我们创建新的原型属性,对象会改变它的隐藏类吗?
- 当引用对象改变时,react .js视图不更新