我正在使用JavaScript创建自己的命名空间...
(function(window){
(function(){
var myNamespace = {
somePublicMethod: function(){
},
anotherPublicMethod: function(){
}
}
return (window.myNamespace = window.my = myNamespace)
}());
})(window);
我是这些高级JavaScript技术的新手,我正在尝试找出从我的命名空间中调用公共方法的最佳方法。我的公开方法this
似乎设置为myNamespace
。
我应该调用像......这样的公共方法吗?
AnotherPublicMethod: function(){
this.somePublicMethod()
}
或...
AnotherPublicMethod: function(){
my.somePublicMethod();
}
有什么不同吗?
答案 0 :(得分:3)
我看到它的方式,如果你使用this
你正在使用对象的直接引用,而如果你使用my
,解释器将需要遍历范围链,直到它找到my
作为window
的属性。
但也可能存在另一种争论。
修改强>
我应该注意,由于this
由如何调用函数决定,因此需要激活对象作为该对象。
所以这会奏效:
my.anotherPublicMethod();
但这不会:
var test = my.anotherPublicMethod;
test();
如果有可能,那么您应该使用my
或其他对该对象的直接引用。您可以通过维护对象的引用来减少范围链遍历。您的myNamespace
变量应该有效。
有点偏离主题,但我也注意到你的代码不会按原样运行。
这一行:
return (window.myNamespace = window.my = myNamespace)
...无法访问myNamespace
变量。
也许你的意思更像是这样?
(function(window){
window.myNamespace = window.my = (function(){
var myNamespace = {
somePublicMethod: function(){
},
anotherPublicMethod: function(){
}
}
return myNamespace;
}());
})(window);