我引发了这个问题,因为出于某种原因,我在将对象变量的值设置为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 :(得分: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);