在ES2015中设置`this。[variable value]`

时间:2017-01-24 02:00:03

标签: javascript ecmascript-6

如何在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的属性。

2 个答案:

答案 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