我想通过构造函数配置对象,如下所示:
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]
设置,但我希望bar
和buz
应该通过 this[key]' 设置。
我认为这样做的语法是(未经测试(
this[key] = val;