如何在ES2015中使用变量的值来设置类的属性?
考虑以下代码:
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的属性。
答案 0 :(得分:1)
错误采用for...in
语法。 option
未定义,您必须使用for(var option in options)
或for(let option in options)
在此之后记录test
时,使用选项2,输出为:
Test {name: "Test", url: "www.stackoverflow.com"}
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);

答案 1 :(得分:-1)
即使没有"use strict"
,ES6课程也处于严格模式。
严格模式禁止隐式全局变量。
option
变量未在任何地方声明。
因此,尝试为其分配一些值会抛出ReferenceError
。