是否可以从对象文字中递归调用一个方法?
例如:
(function () {
'use strict';
var abc = ['A', 'B', 'C'],
obj = {
f: function () {
if (abc.length) {
abc.shift();
f(); // Recursive call
}
}
};
obj.f();
}());
错误:在定义之前使用'f'。
感谢。
答案 0 :(得分:14)
您可以使用命名函数表达式:
f: function myself() {
if (abc.length) {
abc.shift();
myself(); // Recursive call
}
}
答案 1 :(得分:4)
f
是您对象上的方法。因此,当您在f
时,this
将成为f
所附加的对象。因此,要递归调用f
,请使用this.f()
f: function () {
if (abc.length) {
abc.shift();
this.f(); // Recursive call
}
}
请注意,在f
内部,如果this
作为方法调用,f
将只是当前对象:obj.f();
如果您执行以下操作:obj.f.call(lala);
,则this
现在将为lala
。如果你做了类似的事情:
var func = obj.f;
func();
现在this
是f
内的全局对象(或严格模式下未定义)
答案 2 :(得分:1)
在代码中的任何位置都没有定义名为f
的变量。使用obj.f()
(或this.f
,如果您知道this
指向它应该的位置。