Javascript对象属性重置不起作用

时间:2016-11-20 20:36:07

标签: javascript object reset

我有一个名为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

2 个答案:

答案 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