如何在文字对象中声明私有var?我保留了这段代码:
var foo = {
self: null,
init: function() {
self = this;
self.doStuff();
},
doStuff: function() {
//stuff here
}
}
这很有效,但是如果我有一些对象,它会覆盖var“self”...显然它是一个全局变量..我不能在这个对象中使用受限制的单词“var”..
我如何解决这个问题,或为每个对象创建一个NameSpace?
谢谢!
答案 0 :(得分:6)
您可以创建一个隐藏变量的函数范围:
var foo = (function() {
var self = null
return {
init: ...,
doStuff: ...
};
})();
虽然不清楚self
应该在这里做什么,以及如何使用foo
。
答案 1 :(得分:0)
您必须使用this
:
init: function() {
this.self = this;
this.self.doStuff();
},
编辑但是,它仍然是" foo"的财产。对象,并且它并不是非常清楚你在哪里获得" foo"从。换句话说,编写代码的方式只有一个对象。
或者,您可以使用闭包创建对象:
var foo = function() {
var self = null;
return {
init: function() {
self = this;
self.doStuff();
},
doStuff: function() {
//stuff here
}
};
}();
答案 2 :(得分:0)
您甚至没有使用您创建的属性。而是创建另一个具有相同名称的全局变量。使用this
关键字访问属性:
var foo = {
self: null,
init: function() {
this.self = this;
this.self.doStuff();
},
doStuff: function() {
//stuff here
}
}
(虽然在属性中保存this
确实毫无意义......)
如果您想在对象中使用局部变量,请为其创建一个闭包:
var foo = (function(){
var self = null;
return {
init: function() {
self = this;
self.doStuff();
},
doStuff: function() {
//stuff here
}
};
}());