Getter/Setter作为函数

3

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


4
由于在语法上你无法将值分配给一个函数调用...不行。 - deceze
4
也许你只需要使用 instance['Bar'] = 'Foo' - deceze
1
另一种做法与FieryCat所说的类似,可以使用instance.prop('Bar','Foo')来设置,使用instance.prop('Bar')来获取。 - Mike Cluck
1
@MikeC,如我所提到的,我的问题不是如何以不同的方式解决它,而是这种方法是否可行。 - Miroslav Jonas
1
@MiroslavJonas 我知道,但正如deceze所说,你想要的是不可能的。我只是提出了一些可能的东西。 - Mike Cluck
显示剩余4条评论
1个回答

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接