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