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