2017-01-24 10 views
-2

変数の値を使ってES2015のクラスのプロパティを設定するにはどうすればよいですか?ES2015の `this。[variable value]`を設定する

このコードを考えてみましょう:

class Test { 
    constructor() { 
    this.name = ""; 
    this.url = ""; 
    } 

    //Set the options for class 
    setOptions(options) { 
    for (option in options) { 
     this.option = options[option]; //Option 1 
     this[option] = options[option]; //Option 2 
    } 
    } 
} 

const test = new Test(); 
test.setOptions({name: 'Test', url: 'www.stackoverflow.com'}); 

私はオプション1が動作するようになっていません知っているが、オプション2も動作しませんが、私は私がになってるかわからないと見てクラス属性をプログラムで設定します。

私はそれを絶対にはっきりさせるために、オプションと呼ばれるプロパティではなく、クラスに 'name'と 'url'を設定したいと考えています。

+1

'option'の変数宣言を修正すると、うまく動作します。 https://jsfiddle.net/popyL5dq/なぜそれは動作しないと思いますか?あなたはどんな出力を得ていますか? –

+0

*動作しません。*動作しません。コンソールを見てください。変数 'option'には' ReferenceError'があります。それは間違いを追跡するのに必要な手がかりをすべて与えるはずです。 –

+0

これはES2015とは関係ありません。それは基本的なJSです。 –

答えて

1

エラーはfor...in構文です。

​​

class Test { 
 
    constructor() { 
 
    this.name = ""; 
 
    this.url = ""; 
 
    } 
 

 
    //Set the options for class 
 
    setOptions(options) { 
 
    for (let option in options) { 
 
     this[option] = options[option]; //Option 2 
 
    } 
 
    } 
 
} 
 

 
const test = new Test(); 
 
test.setOptions({name: 'Test', url: 'www.stackoverflow.com'}); 
 

 
console.log(test);

optionが定義されていない、あなたはfor(var option in options)またはfor(let option in options)

オプション2を使用して、その後testをロギングすると、出力されたを使用する必要がありますjfriend00が示唆するように、単にObject.assignを使用することもできます:

class Test { 
 
    constructor() { 
 
    this.name = ""; 
 
    this.url = ""; 
 
    } 
 

 
    //Set the options for class 
 
    setOptions(options) { 
 
    Object.assign(this, options); 
 
    } 
 
} 
 

 
const test = new Test(); 
 
test.setOptions({name: 'Test', url: 'www.stackoverflow.com'}); 
 

 
console.log(test);

+0

信じられないほどです。私は実際のコードでこれを修正しましたが、それは単にグローバルなJS変数になるので大したことではないと思っていましたので、追加してから再テストしませんでした。 stackoverflowが私に – Denno

+3

を与えてくれたら、あなたのものを最良の答えとして選択してください。あるいは、単にObject.assign()を使って、すべてのプロパティをコピーするようにしてください。 – jfriend00

+0

+1 'Object.assign'に対して+1しますが、オブジェクトに他の名前付きプロパティがあり、オブジェクトが同じプロパティ名のいずれかで渡された場合、これは厄介なことになることに注意してください。 – lonesomeday

-1

ES6のクラスでも"use strict"なくてstrictモードです。

厳密モードでは、暗黙のグローバルを禁止します。

option変数はどこにも宣言されていません。

したがって、値を割り当てようとすると、ReferenceErrorがスローされます。

関連する問題