我有以下功能:
function a() {
var d = {
foo : "text"
};
for(var b in c) {
if(c.hasOwnProperty(b)) {
d[b] = function() {
return c[b].apply(this, arguments);
};
}
}
return d;
}
var c = {
a : function() { alert(this.foo); },
b : function() { return this.a(); }
}
a().a(); // nothing happens
// but the following works :
var c = {
a : function() { alert(this.foo); }
}
a().a(); // output : text
我认为这是因为this
方法中的.apply
。我该如何解决这个问题?
答案 0 :(得分:1)
它不起作用,因为每个闭包中函数“a”中的迭代器变量“b”是共享。
试试这个:
for(var b in c) {
if(c.hasOwnProperty(b)) {
d[b] = function(b) {
return function() { return c[b].apply(this, arguments); };
}(b);
}
}
答案 1 :(得分:0)
a()在全局范围内执行。当你调用c [b] .apply(this,arguments)时,它也会在全局范围内执行。 for循环从前到后迭代,它首先遇到b,它在全局范围内执行b,它在全局范围内调用a,循环遍历c,在全局范围内调用b,...
结果:RangeError:超出最大调用堆栈大小