给定:
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's answer,因为它引导我到了这个设置:
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();
shout
指向的内容,但数组仍然引用同一个函数。 - Shmiddty