function shout(){ alert('Hello!'); }
var dasarray = [ shout ];
shout();
dasarray[0]();
shout = function(){ alert('World!'); }
shout();
dasarray[0]();
输出:
Hello!
Hello!
World!
Hello!
我已经预期dasarray
接收到功能shout
的引用,但遗憾的是该第四输出是也是你好。如果我假设是正确的,我可以正确修改shout
函数,但是这导致我认为函数没有通过引用传递给dasarray
。
相反的阵列我已经尝试过与对象本实施例的:
dasarray = { myfunction: shout }
在相同的,令人失望的,结果。
我的意图是拥有一个/有功能的数组/对象,它们按顺序运行并且可以实时扩展。 例如,用新功能扩展javascript,并向现有事件添加其他函数调用,这些调用以正确的顺序运行。
那么,任何想法如何通过引用将函数放入数组/对象?
编辑:谢谢你的好答案。我只是想说明,我选择以利的答案,因为它使我这个设置:
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 2013-03-15 17:31:14