从我的命名空间中访问我的公共方法

时间:2011-01-05 19:33:27

标签: javascript namespaces closures javascript-namespaces

我正在使用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();
}

有什么不同吗?

1 个答案:

答案 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);