【发布时间】:2013-03-04 12:46:06
【问题描述】:
给定:
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指向的内容,数组仍然引用相同的函数。
标签: javascript arrays function object pass-by-reference