我有一个递归函数,在角度之外时效果非常好。它都是本机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);
尝试以这种方式调用方法时,是否有特殊的角度?
答案 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]];
}
});
}