是否可以将属性的getter/setter创建为函数?
标准的getter/setter工作方式如下:
class Test {
something: any;
get prop() {
return something;
}
set prop(value) {
something = value;
}
}
let instance = new Test();
instance.prop = 'Foo';
console.log(instance.prop); // = Foo
我需要以下内容:
let instance = new Test();
instance.prop('Bar') = 'Foo'; // access setter as a function of prop
console.log(instance.prop('Bar')); // = Foo
是的,我知道这是不正规的用法,也知道我可以以稍微不同的方式实现此功能。我只是想知道在JS/TS/ES6中是否可能。
更新
这是我找到的最接近的解决方案:
class Test {
something: any;
prop(area /* my custom symbol type */) {
const obj: any = {};
Object.defineProperty(obj, 'value', {
// get child object of my complex object
get: () => this.something[area];
// replace part of my complex object
set: (value) => {
this.something = {...this.something, [area]: value}
}
});
}
}
let instance = new Test();
instance.prop('Bar').value = 'Foo';
console.log(instance.prop('Bar').value); // = Foo
简单来说,如果可能的话,我想去掉value
后缀。
instance['Bar'] = 'Foo'
? - decezeinstance.prop('Bar','Foo')
来设置,使用instance.prop('Bar')
来获取。 - Mike Cluck