代码之家  ›  专栏  ›  技术社区  ›  SBB

角度递归函数在调用自身时抛出错误?[副本]

  •  0
  • SBB  · 技术社区  · 8 年前

    我有一个递归函数,当在角度之外时,它可以很好地工作。它都是原生JS,但在angular2/4中使用时似乎会出错。

    功能:

    convertToArray(object, keys) {
        Object.keys(object).forEach(function (k) {
            if (object[k] && typeof object[k] === 'object') {
                this.convertToArray(object[k], keys);
            }
            if (keys.indexOf(k) !== -1 && !Array.isArray(object[k])) {
                object[k] = [object[k]];
            }
        });
    }
    

    我通过以下方式调用该方法:

    console.log(this._utils.convertToArray(this.mapRulesData, ['rule']))
    

    TypeError: Cannot read property 'convertToArray' of undefined
    

    当我做一些 console.log 在函数中,它似乎在抛出错误之前到达这一行:

    this.convertToArray(object[k], keys);
    

    当试图以这种方式调用方法本身时,angular有什么特殊之处吗?

    1 回复  |  直到 8 年前
        1
  •  4
  •   Suren Srapyan    8 年前

    this 迷失在你的 function (k) function 创造有它自己的

    arrow function . 箭头函数不绑定自己的 .

    convertToArray(object, keys) {
        Object.keys(object).forEach(k => {
            if (object[k] && typeof object[k] === 'object') {
                this.convertToArray(object[k], keys);
            }
            if (keys.indexOf(k) !== -1 && !Array.isArray(object[k])) {
                object[k] = [object[k]];
            }
        });
    }
    
    推荐文章