与えられた:
function shout(){ alert('Hello!'); }
var dasarray = [ shout ];
shout();
dasarray[0]();
shout = function(){ alert('World!'); }
shout();
dasarray[0]();
出力:
Hello!
Hello!
World!
Hello!
dasarray
関数への参照を受け取ったと思っていたのですshout
が、残念ながら4番目の出力もhelloです。私が正しいと仮定すると、shout
関数を正しく変更できましたが、これは、関数が参照によってに渡されなかったという私の仮定につながりますdasarray
。
配列の代わりに、私はすでにこの例をオブジェクトで試しました。
dasarray = { myfunction: shout }
同じ、残念な結果で。
私の意図は、順番に実行され、リアルタイムで拡張できる関数の配列/オブジェクト/関数を使用することです。
たとえば、JavaScriptコードを新しい機能で拡張し、正しい順序で実行される既存のイベントに関数呼び出しを追加します。
では、参照によって関数を配列/オブジェクトに配置するにはどうすればよいですか?
良い答えをありがとう。この設定につながるので、私はEliの答えを選んだことを説明したかっただけです。
zzz = {
calls: [],
shout: function(message) {
alert('Shouting: ' + message);
},
initialize: function () {
zzz.calls.push(['shout','Hello World']);
zzz.calls.push(['shout','this is']);
zzz.calls.push(['shout','my last shout!']);
zzz.run();
zzz.shout = function(){ alert('modified!'); };
zzz.run();
},
run: function () {
$.each(zzz.calls, function(){ zzz[this[0]](this[1]); }); // <- Using jQuery $.each here, just to keep it easy
}
};
zzz.initialize();