JavaScript对象文字方法:递归调用
可以从对象文本递归调用方法吗 例如:JavaScript对象文字方法:递归调用,javascript,recursion,object-literal,function-literal,Javascript,Recursion,Object Literal,Function Literal,可以从对象文本递归调用方法吗 例如: (function () { 'use strict'; var abc = ['A', 'B', 'C'], obj = { f: function () { if (abc.length) { abc.shift(); f(); // Recursive call
(function () {
'use strict';
var abc = ['A', 'B', 'C'],
obj = {
f: function () {
if (abc.length) {
abc.shift();
f(); // Recursive call
}
}
};
obj.f();
}());
错误:在定义之前使用了“f”
谢谢。代码中没有定义名为
f
的变量。使用obj.f()。因此,当您在f
中时,此
将是f
所附加的对象。因此,要递归调用f
,请使用this.f()
请注意,在f
的内部,只有当f
作为方法调用时,此才会是当前对象:obj.f()代码>
如果你做了类似的事情:obj.f.call(拉拉)
,然后这个
现在将是lala
。如果你做了以下事情:
var func = obj.f;
func();
现在此
是f
中的全局对象(或在严格模式下未定义)您可以使用命名函数表达式:
必须阅读:此
可能指向也可能不指向obj
,具体取决于f
的调用方式。最好在它以后咬到那个家伙之前把这件事弄清楚。@MattiVirkkunen-确实-编辑。谢谢你的提示,享受你的新徽章:)耶,这应该是你选择的答案。也谢谢你的链接。让它成为一个命名函数,究竟有什么可以绕过erorr的呢?创建自己的闭包?
var func = obj.f;
func();
f: function myself() {
if (abc.length) {
abc.shift();
myself(); // Recursive call
}
}