从我的命名空间中访问我的公共方法
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
这样做可能是有原因的.以上是关于从我的命名空间中访问我的公共方法的主要内容,如果未能解决你的问题,请参考以下文章