2017-01-24 41 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',而不是名爲option的屬性。

+1

一旦你修復了'option'的變量聲明,它就可以正常工作。 https://jsfiddle.net/popyL5dq/你爲什麼認爲它不起作用?你得到什麼輸出? –

+0

*不起作用*不起作用如何?看看控制檯。你很可能在變量'option'上看到'ReferenceError'。那應該會給你所有追蹤錯誤的線索。 –

+0

這與ES2015無關。這是基本的JS。 –

回答

1

錯誤出現在for...in語法中。 option沒有定義,你將不得不使用for(var option in options)for(let option in options)

當登錄後test,使用選項2,輸出爲:

​​

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);

正如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

對於'Object.assign'爲+1,但請注意,如果您的對象上有任何其他命名屬性並且某個對象使用任何相同的屬性名稱傳入,則這可能會造成令人討厭的事情。 – lonesomeday

-1

ES6類是在嚴格模式下,即使沒有"use strict"

嚴格模式禁止隱式全局變量。

option變量沒有在任何地方聲明。

因此,試圖分配一些值將會拋出一個ReferenceError

相關問題