2015-07-13 39 views
5

我有一個ES6類的實例化函數調用中的變量,但問題是,它似乎是構造函數實例,並拋出一個錯誤之前的功能正在運行:的js ES6類的構造函數實例

constructor() { 
    this.userSelections = { 
     types : this.getTypes(), 
     providers: this.getProvider() 
    } 
    } 

getProvider() { 
    // here its throw error that this.userSelections is undefined 
    var activeType = this.userSelections.types.some((type) => { 
     return type.active; 
    }); 

    } 

什麼是問題,我如何處理這種情況?

回答

5

該問題與類,ES6或巴別塔無關。這是你的問題的一個簡化版本:

var foo = { 
    bar: 42, 
    baz: foo.bar * 2 
}; 

因爲foo沒有此刻foo.bar訪問尚未初始化,這將拋出一個錯誤。

在你的情況,會在呼籲getProvider你要分配給this.userSelections對象的創建。或者它的價值尚不存在,它仍在建設中。

你可以分兩個步驟初始化值:

this.userSelections = { 
    types: this.getTypes() 
}; 
// now that `this.userSelections` exists, we can call `this.getProvider` without problems 
this.userSelections.providers = this.getProvider(); 

或重構你的代碼,這樣getProviders接受types爲參數,也許是這樣的:

class Foo { 
    constructor() { 
    let types = this.getTypes(); 
    this.userSelection = { 
     types, 
     providers: this._getProvider(types) 
    }; 
    } 

    _getProvider(types) { 
    var activeType = types.some((type) => { 
     return type.active; 
    }); 
    // ... 
    } 

    getProvider() { 
    return this._getProvider(this.userSelection.types); 
    } 
} 
+0

他'this'引用'userSelections對象。他正在'userSelections'對象上調用'getProviders'。 –

+2

@DanPantry:不,它不。這不是對象文字如何工作。 –

+0

我的錯誤。我不知道爲什麼,但我忘了構造函數創建一個執行上下文。 –

相關問題