2011-07-26 56 views
0

我有一個幫助函數,它允許我在不同的上下文中調用函數。這很簡單:代表 - 構造/執行 - 時間參數

function delegate(that, thatMethod) 
{ 
    return function() { return thatMethod.apply(that,arguments); } 
} 

這是確定的,如果我wan't在函數的執行評估的變量,但有時我想給它固定在施工時委託函數值。
樣品:

var callbacks = new Array(); 
for(var i = 0; i < 5; i++) 
{ 
    callbacks.push(delegate(window, function() { alert(i) })); 
} 
callbacks[3](); 

在這種情況下,我預期的行爲是,我得到一個警報(3)但由於在執行評估我們不知道。
我知道還有另外一個委託函數它看起來像:

function delegatedd(that, thatMethod) 
{ 
    if(arguments.length > 2) 
    { 
     var _params = []; 
     for(var n = 2; n < arguments.length; ++n) 
      _params.push(arguments[n]); 
     return function() { return thatMethod.apply(that,_params); } 
    } 
    else 
     return function() { return thatMethod.call(that); } 
} 

但是,這並不能幫助我是因爲我想混用兩種方法。它可以寫成這樣(委託的第一個版本使用):

function(foo) { 
    return delegate(window, function() { 
     alert(foo); 
    }); 
}(i) 

所以是施工時間和其他一切執行時間。
這個缺點是它看起來很醜。有沒有更好的方法來做到這一點?我能以某種方式將它隱藏在一個函數中嗎?

感謝

回答