Getter / Setter作为功能

时间:2017-09-29 14:22:04

标签: javascript typescript ecmascript-6

是否可以将属性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后缀。

1 个答案:

答案 0 :(得分:0)

正如@deceze在第一条评论中提到的那样,无法分配给函数调用,因此更新中的解决方案是最佳的。