2016-08-05 38 views
-1

標題可能有點混亂,但我有以下問題:與參數Javascript類的構造函數從對象文本作爲關鍵

var propertyList = { 
    type1: {property1: 1}, 
    type2: {property1: 2} 
} 

class Test { 
    constructor(typ){ 
     this.property1 = propertyList.typ.property1; 
    } 
} 

var a = new Test('type1'); 

代碼是不言自明 - 我想設置a對象的property1財產不是通過在構造函數中手動傳遞值,而是通過將其一個關鍵字傳遞給構造函數,從而選擇propertyList對象字面值中的一個值。我預計,當我運行上面的代碼時,將創建對象a,並將property1值設置爲1.但是,不是我得到了Uncaught TypeError: Cannot read property 'property1' of undefined錯誤。當我在構造函數的第一行觸發console.log(typ)時,它正確地顯示傳遞給構造函數的值是type1。爲什麼上面的代碼不起作用,它可以以某種方式修復?

+1

您需要使用這個語法:'對propertyList [典型值] .property1'否則會顯得的屬性名稱** **典型的對propertyList對象(並且此屬性不存在) –

回答

0

您的語法稍微偏離。你不能在你的任務中使用傳入的參數typ,因爲代碼實際上會在propertyList(如propertyList { typ: })內查找屬性typ。要使用您的傳入的說法,把它包在括號:

this.property1 = propertyList[typ].property1;