我有一个名为myObject的javascript对象。在该对象内部,我有一个名为x的属性,其值为0.在我将x值递增1之后,我想将其重置为0,而不是访问x来更改它,但由于某种原因它不起作用。我正在使用模块模式。
var MyObject = (function(){
return {
x:0
}
})();
var myObject = MyObject;
myObject.x+=1;
console.log(myObject.x); // shows value of 1
myObject = MyObject; // object property reset
console.log(myObject.x); // shows value of 1, but i want 0
答案 0 :(得分:3)
您没有重置对象。你需要每次都调用这个函数。
var MyObject = (function() {
return {
x: 0
}
});
var myObject = MyObject();
myObject.x += 1;
console.log(myObject.x); // shows value of 1
myObject = MyObject(); // object property reset
console.log(myObject.x); // shows value of 0
答案 1 :(得分:2)
Javascript对象重置无法正常工作
这是因为您正在重新分配对同一对象的引用。
您正在使用IIFE (Immediately-Invoked Function Expression)初始将值{x: 0}
分配给MyObject
。您不将功能分配给MyObject
:
var MyObject = (function() {
return {
x: 0
}
})();
console.log(MyObject); // { x: 0 }
那是因为IIFE只执行一次然后不再存在。当您执行var myObject = MyObject;
后,您不创建MyObject
的副本,而只是另一个对象{ x: 0 }
的引用:
var a = {x: 0};
var b = a;
console.log(b); // {x: 0}
b.x = 10;
console.log (a); // 10
console.log (b); // 10
这就是为什么您的myObject = MyObject;
没有重置任何内容的原因,因为您实际上只是在重述myObject
应指向与MyObject
相同的对象。
将您的代码更改为:
var MyObject = function(){
return {x: 0}
}
var myObject = MyObject();
myObject.x+=1;
console.log(myObject.x); // 1
myObject = MyObject();
console.log(myObject.x); // 0