Javascript 带回调的对象方法中的递归

Recursion in Javascript object method with callback

我在 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',然后想要获取该对象的所有其他对象(如存储在 'dependents' 属性 中)和将函数 'doStuff' 应用于那些依赖对象。这一点工作正常。

我正在努力解决的问题是如何在依赖于第一个对象的对象上递归调用 getDependents 方法并应用相同的回调函数,然后在任何其他级别的依赖对象上执行相同的操作,等(即多个未知级别的依赖)。

关于执行此操作的最佳方法有什么建议吗???

您只需在您正在遍历的每个家属上调用它:

for (var i = 0; i < this.dependents.length; i++) {
    deps.push(this.dependents[i]);
    deps.push.apply(deps, this.dependents[i].getDependents(callback,callback_opts));
    …

您调用它的顺序(相对于您推送单个依赖项并对其调用回调时的顺序)决定了 traversal order。使用您需要或喜欢的东西。