2010-01-30 87 views
0

我有一个相当大的一组javascript函数,我正在使用Prototype重构为一组类。简化将匿名javascript函数绑定到类

我想知道是否有办法让绑定匿名函数对类更简单?我一直忘记在最后添加绑定。或者这只是它一直这样做的方式?

var arr = this.getSomeArray(); 
arr.each(function(t) { 
    t.update(val); 
    this.updateJSValue(t); 
}.bind(this)); 

回答

1

您的选项基本上都是调用一些功能(bindaddMethods或者你写的另一个函数),或者使用一个局部变量,而不是this

var self=this; 
arr.each(function(t) { 
    t.update(val); 
    self.updateJSValue(t); 
}); 

如果你已经有大量的功能,局部变量只需要最少的输入就只有少数功能,没有太大的差别。

function ThingMixin(self) { 
    self.foo = function(arr) { 
     arr.each(function(t) { 
      t.update(val); 
      self.updateJSValue(t); 
     }); 
    }; 
    ... 
}; 
... 
ThingMixin(Ralph.prototype); 

// or an anonymous function: 
(function (self){ 
    self.foo = function(arr) { 
     arr.each(function(t) { 
      t.update(val); 
      self.updateJSValue(t); 
     }); 
    }; 
    ... 
})(Ralph.prototype); 
+0

使用局部变量有什么样的性能增加/减少?大多数发生这些情况的地方都是双重循环。 – Casey 2010-01-30 01:13:53

+0

我期望内存使用量略有增加,因为变量会因闭包而长寿,但对性能的影响应该可以忽略不计。请注意,'bind'最有可能使用局部变量。 – outis 2010-01-30 01:40:06

+0

这个评论比正确性更关注于性能,但是如果你想在每次迭代时绑定到同一个对象,那么在循环之外设置'self',并且性能影响不明显;如果你想绑定到不同的对象,在循环块中声明'self'。 – outis 2010-01-30 01:40:41