我创建了一个Javascript命名空间,以避免与其他Javascript代码冲突。
var ns = {
init: function() {
$('a').click(this.clickHandler);
},
clickHandler: function() {
// Some code here ..
// The keyword "this" does not reference my "ns" object anymore.
// Now, it represents the "anchor"
this.updateUI();
},
updateUI: function() {
// Some code here ...
}
};
请问,我如何引用我的封闭命名空间?
答案 0 :(得分:6)
$('a').click($.proxy(this.clickHandler, this));
答案 1 :(得分:4)
您可以将事件处理程序绑定到匿名函数,并在其中调用 clickHandler 。这样,上下文仍将引用 ns 对象。
var ns = {
init: function() {
var self = this; // store context in closure chain
$('a').click(function () {
self.clickHandler();
});
},
clickHandler: function() {
this.updateUI();
},
updateUI: function() {
// Some code here ...
}
};
答案 2 :(得分:1)
这是一篇文章:http://www.codeproject.com/Articles/108786/Encapsulation-in-JavaScript
它解释了在命名空间中创建一个闭包,你可以在那里存储东西(比如原版'这个')
var ns = (function () {
var self;
return {
init: function () {
self = this;
$('a').click(this.clickHandler);
},
clickHandler: function () {
// Some code here ..
self.updateUI();
},
updateUI: function () {
// Some code here ...
}
};
})();
答案 3 :(得分:0)
这样做的一个好方法是在引用它的函数中定义局部变量。当“这个”改变你时,这会有所帮助。您的代码可能如下所示:
var ns = new (function() {
var self = this;
self.init = function() {
$('a').click(self.clickHandler);
},
self.clickHandler = function() {
// Some code here ..
// The keyword "this" does not reference my "ns" object anymore.
// Now, it represents the "anchor"
self.updateUI();
},
self.updateUI = function() {
// Some code here ...
}
})();
这允许您仍然使用this引用事件处理程序,然后使用仅在内部提供的本地定义的引用引用您的命名空间。