[英]Alter value in object
在编写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语句的其他方法。
您可以使用字符串作为属性名称在this
设置。
var genreOptions = {
'option1': 'option1Active',
'option2': 'option2Active',
'option3': 'option3Active',
'option4': 'option4Active'
};
function selectGenre (genre) {
this[genreOptions[genre]] = true;
}
似乎您可以仅在genre
上附加"Active"
,以获取属性本身:
function selectGenre (genre)
{
var prop = genre + 'Active';
if (typeof this[prop] != 'undefined') {
this[prop] = true;
}
}
不过,如果您可以使用数组作为属性( this.optionActive[3]
与this.option3Active
,则会更容易。
这是你想要的吗 ?
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.