在数组的循环中绑定'this'

时间:2011-02-21 16:37:47

标签: javascript prototypejs this

我有一个带命名空间的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。

2 个答案:

答案 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技术。