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

getter和setter方法

JSON 使用 getter/setter 对 ES6 类属性进行字符串化

在 PyGetSetDef 中使用闭包来重用属性 getter-setter