我有一个带命名空间的Javascript函数,我使用Prototype来执行一个函数。示例代码:
GUI.Title = {
initialise: function() {
var elements = $$('a');
this.show(); /* now it refers to the namespace */
elements.each(function(element) {
this.show(); /* this refers to the window object, not to the namespace */
});
},
show: function() {
element.show();
}
}
'this'指的是每个函数之外的命名空间,并且在每个函数内部引用该窗口。
有人可以向我解释如何在每个循环中使用'this'作为命名空间的引用者吗?
我正在使用Prototype。
答案 0 :(得分:11)
使用Prototype的bind
方法修改函数内this
的含义。
elements.each(function(element) {
this.show();
}.bind(this));
答案 1 :(得分:7)
替换
this.show(); /* now it refers to the namespace */
elements.each(function(element) {
this.show(); /* this refers to the window object, not to the namespace */
});
与
var scope = this;
elements.each(function(element) {
scope.show(); /* this refers to the window object, not to the namespace */
});
你正在做的是创建一个闭包,'scope'var以词法方式“封闭”到你的每个函数。请注意,这种方法不是原型特定的,它是一种通用的javascript技术。