2013-03-13 71 views
0

我被带到这个问题,因为出于某种原因,我有一个问题,设置对象变量的值为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?

+0

这看起来并不像JavaScript,检查你的语法http://www.jshint.com/ – elclanrs 2013-03-13 00:32:36

回答

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/

使用新的与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/

+0

'变种的varName {'语法无效 – 2013-03-13 00:30:36

+0

@ExplosionPills刚刚注意到'.self'也是如此,谢谢您的反馈,我们的答案已更新 – 2013-03-13 00:31:35

+0

。关于创建对象的不同实例,我试图覆盖该对象,而不是创建单独的实例,这就是为什么我要在已经存在的变量上创建“新MyObject”的原因。但不知道这是一种好还是坏的做法。 – pedalpete 2013-03-13 03:20:21