use*_*959 8 javascript recursion function-literal object-literal
是否可以从对象文字中递归调用一个方法?
例如:
(function () {
'use strict';
var abc = ['A', 'B', 'C'],
obj = {
f: function () {
if (abc.length) {
abc.shift();
f(); // Recursive call
}
}
};
obj.f();
}());
Run Code Online (Sandbox Code Playgroud)
错误:在定义之前使用'f'.
谢谢.
use*_*621 15
您可以使用命名函数表达式:
f: function myself() {
if (abc.length) {
abc.shift();
myself(); // Recursive call
}
}
Run Code Online (Sandbox Code Playgroud)
必读:http://kangax.github.com/nfe/
f是您对象上的一个方法。因此,当您在 中时f,this将f是附加到的对象。所以要递归调用f,请使用this.f()
f: function () {
if (abc.length) {
abc.shift();
this.f(); // Recursive call
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果作为方法调用f,this则在 , 内部只会是当前对象f:obj.f();
如果您执行以下操作: obj.f.call(lala);,那么this现在将是lala。如果您执行以下操作:
var func = obj.f;
func();
Run Code Online (Sandbox Code Playgroud)
现在this是内部的全局对象f(或在严格模式下未定义)