2017-09-14 63 views
0

我有一個遞歸函數,在角度之外時可以很好地工作。這是所有本地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); 

想有一個方法調用本身以這種方式時,是不是有什麼特別的有角?

回答

2

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]]; 
     } 
    }); 
} 
相關問題