私は、別のコンテキストで関数を呼び出すことができるヘルパー関数を持っています。それはかなり簡単です:私は、関数の実行時の変数を評価するwan'tが、時々私は、建設時に固定されているデリゲート関数値を与えたい場合は代理人 - 構築/実行-Time-Parameter
function delegate(that, thatMethod)
{
return function() { return thatMethod.apply(that,arguments); }
}
これはokです。
サンプル:
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)
ので私は施工時間と他のすべての実行時間です。
これの欠点は、それがかなり醜いように見えるということです。それを行うより良い方法はありますか?どういうわけかそれを関数で隠すことはできますか?
おかげ