0

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

我有

变量我的对象{
     checkValid = 假,
     self.getCheckValid = 函数(){
          返回校验有效;
     }
     self.setCheckValid = 功能(模式){
          checkValid = 模式;
     }
}

objectVariable = new myObject;

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

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

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

4

1 回答 1

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 with 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/

于 2013-03-13T00:29:18.787 回答