Getter/Setter 作为函数
Posted
技术标签:
【中文标题】Getter/Setter 作为函数【英文标题】:Getter/Setter as function 【发布时间】:2018-03-11 11:29:23 【问题描述】:是否可以将属性 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'
?
另一种方法,类似于 FieryCat 所说的,设置instance.prop('Bar', 'Foo')
,获取instance.prop('Bar')
。
@MikeC,如前所述,我的问题不是如何以不同的方式解决问题,而是有可能以这种方式解决它。
@MiroslavJonas 我知道,但正如 deceze 所说,你想要的是不可能的。我只是在展示是可能的东西。
【参考方案1】:
正如@deceze 在第一条评论中提到的,不可能分配给函数调用,所以更新中的解决方案是最好的。
【讨论】:
以上是关于Getter/Setter 作为函数的主要内容,如果未能解决你的问题,请参考以下文章
es6 对象的 getter、setter 和函数不适用于远程过程调用 (zerorpc)
如何一次生成构造函数、getter、setter、equals&hashcode 和 toString?
有关js 的 defineProperty函数 getter setter