2016-08-05 9 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オブジェクトのリテラルから値の1つをコンストラクタに渡すことによって値を選択します。私は上記のコードを実行すると、property1の値を1に設定してオブジェクトaが作成されると予想していましたが、その代わりにUncaught TypeError: Cannot read property 'property1' of undefinedエラーが発生しました。コンストラクタの最初の行でconsole.log(typ)をパストすると、コンストラクタに渡された値がtype1であることが正しく示されます。上記のコードがうまくいかず、何とか修正できますか?

+1

あなたはこの構文を使用する必要があります: 'のpropertylist [標準] .property1'それ以外の場合は、プロパティ名を探しますが**のpropertylistのtyp **オブジェクト(このプロパティは存在しません) –

答えて

0

あなたの構文は少しです。そのようなコードではtyppropertyListpropertyList { typ: }のような)内のプロパティを実際に探しますので、渡された引数typをあなたの割り当てに使用することはできません。あなたの渡された引数を使用するには、角かっこでラップ:

this.property1 = propertyList[typ].property1; 
関連する問題