Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带回调的Javascript对象方法中的递归_Javascript_Object_Recursion_Methods - Fatal编程技术网

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

带回调的Javascript对象方法中的递归,javascript,object,recursion,methods,Javascript,Object,Recursion,Methods,我对javascript对象方法中的递归有一个挑战,我希望有人能提供帮助。这可能需要对我的代码进行一些重新分解 我正在使用对象工厂创建许多相同类型的对象——为了保持简单,让我们假设对象具有以下属性 this.objID; this.dependents = []; //array of objects linked to this one this.otherProperty = ""; this.anotherProperty = ""; 现在考虑下面的代码: MyObject

我对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)
};
MyObject.prototype.updateDependents=function(){
多斯塔夫(本);
此.getDependents(doStuff);
};
MyObject.prototype.getDependents=函数(回调,回调选项){
var deps=[];
if(typeOf callback!=“function”){callback=false;}
for(var i=0;i
我正在对一个对象调用“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));
    …
for(var i=0;i

您调用此函数的顺序(与推送单个依赖项并对其调用回调时的顺序相比)决定了。使用您需要或喜欢的内容。

如果您的所有依赖项都实现了
updateDependents
方法,您可以从
updateDependents
中循环调用
dependent.updateDependents()
。谢谢。是否应该在回调后立即添加?是否为“this.dependents[i].updateDependents(callback)”?在您的情况下,您不需要将回调作为参数传递,因为原型方法也定义了回调方法。
this.dependents[i].updateDependents()
应该有用。干杯,我会尝试一下感谢您的帮助@Karma。让它检查下一级家属,但发现Bergi的答案最合适。谢谢@Bergi,我可以问一下您的回答中“.e.”和“appl”的功能/含义吗抱歉,
.e
是c&p错误。可以从数组,这里是递归调用返回的数组。谢谢,将给出一个goyou,它对代码做了一个小改动,但工作起来非常有魅力;必须将“this.dependents[i]更改为“obj[this.dependents[i]”,其中obj是一个包含对象的数组。