Angular - 递归函数在调用自身时会抛出错误?

时间:2017-09-14 07:18:15

标签: angular typescript

我有一个递归函数,在角度之外时效果非常好。它都是本机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);

尝试以这种方式调用方法时,是否有特殊的角度?

1 个答案:

答案 0 :(得分:3)

this在您的function (k)中丢失,并未引用该对象本身。每个function创建都有自己的this

将其更改为arrow function。箭头函数不绑定自己的this

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]];
        }
    });
}