用新的或清除的对象字段替换对象?

时间:2013-03-13 00:26:22

标签: javascript object

我引发了这个问题,因为出于某种原因,我在将对象变量的值设置为false时遇到了问题。

我有

var myObject{
     checkValid = false,
     self.getCheckValid = function(){
          return checkValid;
     }
     self.setCheckValid = function(mode){
          checkValid = mode;
     }
}

objectVariable = new myObject;

当我跑objectVarible.setCheckValid(true)时,我会得到真正的价值。但是当我运行objectVariable.setCheckValid(false)时,整个应用程序都会出错(除了我在移动设备上开发并且看不到返回的实际错误)。

但后来我想知道,如果我不能将模式设置为false,我可以通过再次调用objectVariable = new myObject;来重新启动整个对象。这将用新对象覆盖旧对象并让我回到初始化状态,这正是我正在寻找的。

有没有理由不这样做?或者一种方法比另一种更好? 有什么理由我不能将checkValid设置为false?

1 个答案:

答案 0 :(得分:4)

创建对象的语法使用:而不是=来创建属性。也无需使用.self来访问属性。此外,在将对象分配给变量时,您应该使用语法var myObject = {/**properties**/};

   var myObject = {
         checkValid:false,
         getCheckValid: function(){
              return this.checkValid;
         },
         setCheckValid: function(mode){
              this.checkValid = mode;
         }
    };

工作示例: http://jsfiddle.net/PSYSM/

您放置在对象上的访问者是不必要的,您可以直接访问checkValid属性而无需访问者。

   var myObject = {
         checkValid:false
    };

   alert(myObject.checkValid);
   myObject.checkValid = true;
   alert(myObject.checkValid);

工作示例: http://jsfiddle.net/JtfaJ/

关于将new与MyObject一起使用,这是不可能的,因为您声明了一个对象文字。只存在此对象的一个​​实例,因此无法创建该对象的实例。如果要创建实例,则需要创建对象构造函数。这可以按如下方式完成:

function MyObject(){
   this.checkValid = false;
}

var myObject1 = new MyObject();
myObject1.checkValid = true;
alert(myObject1.checkValid);

var myObject2 = new MyObject();
alert(myObject2.checkValid);

工作示例: http://jsfiddle.net/PzhUV/