改变对象的价值

时间:2014-09-23 21:38:35

标签: javascript

编写Javascript,我有一个具有以下属性的对象/类:

this.option1Active = null;
this.option2Active = null;
this.option3Active = null;
this.option4Active = null;

我想根据参数genre

将其中一个属性设置为true
function selectGenre (genre) {
  if (genre === 'option1') {
    this.option1Active = true;
  }

  else if (genre === 'option2') {
    this.option2Active = true;
  }

  else if (genre === 'option3') {
    this.option3Active = true;
  }

  else if (genre === 'option4') {
    this.option4Active = true;
  }
}

虽然写if语句不是一个可持续的解决方案。 我想做这样的事情:

function selectGenre (genre) {
  var options = {
    'option1': this.option1Active,
    'option2': this.option2Active,
    'option3': this.option3Active,
    'option4': this.option4Active
  };

  options[genre] = true;
}

但是只将options[index]设置为true,而不是this.option1Active。 有没有办法更改对象的键指向的引用?

如果没有,非常感谢重构if语句的其他方法。

3 个答案:

答案 0 :(得分:2)

您可以使用字符串为this设置属性名称。

var genreOptions = {
  'option1': 'option1Active',
  'option2': 'option2Active',
  'option3': 'option3Active',
  'option4': 'option4Active'
};

function selectGenre (genre) {
  this[genreOptions[genre]] = true;
}

答案 1 :(得分:0)

您似乎可以将"Active"附加到genre以获取该属性:

function selectGenre (genre) 
{
  var prop = genre + 'Active';

  if (typeof this[prop] != 'undefined') {
      this[prop] = true;
  }
}

但是,如果你可以使用数组作为你的属性,那就更容易了,例如this.optionActive[3]this.option3Active

答案 2 :(得分:-1)

这是你想要的吗?

var obj = {};
obj.option1Active = null;
obj.option2Active = null;
obj.option3Active = null;
obj.option4Active = null;

var options = {
    option1: 'option1Active',
    option2: 'option2Active',
    option3: 'option3Active',
    option4: 'option4Active'
};

function selectGenre(genre) {
    obj[options[genre]] = true;
}

console.log(obj);
selectGenre('option2');
console.log(obj);