【发布时间】:2015-02-16 18:13:04
【问题描述】:
我在 javascript 对象方法中遇到了递归问题,希望有人能提供帮助。它可能需要对我的代码进行一些重构。
我正在使用对象工厂创建多个相同类型的对象 - 为简单起见,我们假设对象具有以下属性;
this.objID;
this.dependents = []; //array of objects linked to this one
this.otherProperty = "";
this.anotherProperty = "";
现在考虑以下代码:
MyObject.prototype.updateDependents = function() {
doStuff(this);
this.getDependents(doStuff);
};
MyObject.prototype.getDependents = function(callback,callback_opts) {
var deps = [];
if (typeOf callback !== "function") { callback = false; }
for (var i = 0; i < this.dependents.length; i++) {
deps.push(this.dependents[i]);
if (callback) {
callback(this.dependents[i],callback_opts);
}
}
return deps;
};
function doStuff(myObj) {
//..do some stuff to "myObj" (i.e. update other properties)
};
我在一个对象上调用方法“updateDependents”,然后想要获取该对象的所有其他依赖项(存储在“依赖项”属性中)并将函数“doStuff”应用于这些依赖对象.这一点工作正常。
我正在努力解决的问题是如何在依赖于第一个对象的对象上递归调用 getDependents 方法并应用相同的回调函数,然后在任何其他级别的依赖对象等上执行相同的操作(即多个和未知级别的依赖)。
关于最好的方法有什么建议吗???
【问题讨论】:
-
如果您的所有依赖项都实现了
updateDependents方法,您可以从updateDependents中循环遍历每个依赖项并调用dependent.updateDependents()。 -
谢谢。应该在回调之后立即添加吗?它会是“this.depependents [i].updateDependents (callback)”吗?
-
在您的情况下,您不需要将回调作为参数传递,因为您的原型方法也定义了回调方法。
this.depependents [i].updateDependents ()应该可以工作。 -
干杯,试试看
-
感谢您的帮助@Karma。得到它来检查下一级家属,但发现 Bergi 的答案最合适。
标签: javascript object recursion methods