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

Posted

技术标签:

【中文标题】从我的命名空间中访问我的公共方法【英文标题】:accessing my public methods from within my namespace 【发布时间】:2011-06-04 06:00:58 【问题描述】:

我正在用 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】:

在我看来,如果您使用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);

【讨论】:

哈哈 - 好电话!一点也不偏离主题,当我为这个问题剥离我的命名空间时,我犯了一个错误。编辑工作=) 我是新手,使用 JavaScript 而不是依赖 jQuery 的东西......我的大脑很痛。 @Derek:看看你的更新。请记住,内部函数调用的 return 值被浪费了,因为它没有被分配给任何东西。所以你可以删除return。实际上,内部函数根本不是必需的,尽管它可能在您的实际代码中? @Derek:关于你的最后评论,我可以理解。在过去六个月左右的时间里,我有很多天的脑痛、抽筋,但我很高兴我做到了。 我实际上只是试图复制jQuery 框架用来制作$ 快捷方式的内容......你的方式更有意义,尽管jresig 这样做可能是有原因的.

以上是关于从我的命名空间中访问我的公共方法的主要内容,如果未能解决你的问题,请参考以下文章

从命名空间调用方法以在另一个 javascript 文件中使用

使用命名空间调用 jquery

Swift XCTest 命名空间错误?

Linq to Xml:删除命名空间

C#中如何获得指定命名空间中所有自定义类的信息

2017-04-14命名空间访问修饰符封装继承多态