鉴于:
function shout(){ alert('Hello!'); }
var dasarray = [ shout ];
shout();
dasarray[0]();
shout = function(){ alert('World!'); }
shout();
dasarray[0]();
输出:
Hello!
Hello!
World!
Hello!
我原以为会dasarray
收到对该函数的引用shout
,但遗憾的是第四个输出也是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();