3

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

有什么区别吗?

4

1 回答 1

3

在我看来,如果您使用,则使用this对对象的直接引用,而如果您使用,则解释器将需要遍历作用域链,my直到找到my.window

但也可能有其他方面的争论。

编辑:

我应该注意,由于this由函数的调用方式决定,因此需要 Activation 对象是该对象。

所以这会起作用:

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);
于 2011-01-05T19:44:25.203 回答