Angular - 递归函数在调用自身时会抛出错误?
问题描述:
我有一个递归函数,在角度之外时可以很好地工作。这是所有本地JS,但似乎在尝试在angular2/4中使用它时会引发错误。Angular - 递归函数在调用自身时会抛出错误?
功能:
console.log(this._utils.convertToArray(this.mapRulesData, ['rule']))
当我在我的项目中运行它,我收到以下错误:
TypeError: Cannot read property 'convertToArray' of undefined
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.convertToArray(object[k], keys);
想有一个方法调用本身以这种方式时,是不是有什么特别的有角?
答
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]];
}
});
}