从 Javascript 构造函数动态调用 setter



我想通过构造函数配置对象,如下所示:

class Foo {
constructor(obj) {
this.options = {};
Object.entries(obj).forEach(([key, val]) => {
const desc = Object.getOwnPropertyDescriptor(this, key);
if (desc && desc.set) {
// can't reach that condition
this[key] = val;
} else {
// all properties sets via that condition
this.options[key] = val;
}
});
}
set bar(val) {
this.options.bar = val.toString();
}
set baz(val) {
this.options.baz = parseInt(val, 10);
}
}
const f = new Foo({ bar: 10, baz: '20', xxx: 0 });
console.log(f.options);
// expected: { bar: '10', baz: 20, xxx: 0 }
// actual { bar: 10, baz: '20', xxx: 0 }

有可能让它工作吗?所有属性都通过this.options[key]设置,但我希望barbuz应该通过 this[key]' 设置。

我认为这样做的语法是(未经测试(

this[key] = val;

最新更新