2010-01-30 19 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