I am trying to get a recursion method to work in a class context. Within my class I have the following method:
countChildren(n, levelWidth, level) {
if (n.children && n.children.length > 0) {
if (levelWidth.length <= level + 1) {
levelWidth.push(0);
}
levelWidth[level + 1] += n.children.length;
n.children.forEach(function (n) {
this.countChildren(n, levelWidth, level+1);
});
}
// Return largest openend width
return levelWidth;
}
However, when I use this method (which worked before when I just used it as function countChildren = ...
) it can't... find (?) itself: Cannot read property 'countChildren' of undefined
at the recursion.
Does anyone have any ideas?
Try using
.call()
to invoke the function. That way you can specify the context directly.Like this:
this.countChildren.call(this, n, levelWid);
th, level+1Edit: Noticed my error, what you should really do is bind the anonymous function:
like this:
The problem arises because within your loop,
this
gets redefined to the inner function scope.The this inside the foreach than the this in the class. In your case, this refers to the current element being iterated.
you need to bind the scope.
Try binding the method in the constructor.
Also, by using an arrow function for your
forEach
, you keep the scope of the class'this
.the variable
this
Gets redefined within:I agree with krillgar with the declaration of self. it fixed my problem with an asynchronous call.