当前位置: 首页 > 知识库问答 >
问题:

Getter/Setter作为函数

太叔繁
2023-03-14

是否可以将属性获取器/设置器创建为函数?

标准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

所以简而言之,如果可能的话,我想去掉后缀。

共有1个答案

公良奇
2023-03-14

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

 类似资料:
  • 利用 getter/setter 可以拦截操作对象的属性,在设置属性前或获取属性前做一些事情。 1. getter get语法将对象属性绑定到查询该属性时将被调用的函数。(MDN) // 语法 var 对象 = { get 属性名() { // 做一些事情 balabala return 值; } }; getter 在获取一个属性时被调用,同时返回 getter 的返回

  • 问题内容: 我不是PHP开发人员,所以我想知道在PHP中,使用纯OOP风格的显式getter / setters是否具有私有字段(我喜欢这样)是否更受欢迎: 或只是公共领域: 谢谢 问题答案: 您可以使用php magic methods __get and __set.

  • 我不明白为什么我必须对类中的私有属性使用getter或setter。

  • 问题内容: 始终建议使用getter / setter访问私有变量。为什么最好将它们声明为public并对其进行访问。无论如何,我们正在使用getter和setter访问它? 问题答案: @mre的回答非常好,您的问题很重要。总结一下:您将对象的字段设置为私有,以控制其他对象使用它的方式。您的对象使用setter来: 限制和验证传递给设置器的数据 隐藏其内部数据结构(服务对其他对象感兴趣,而不是服

  • 我写了我自己的AST转换,它应该生成getter和setter方法(在这里创建getter方法)。但是他们不工作,不能理解原因。 使用属性创建注释 我的AST转换代码应该为注释字段创建getter方法 注释检查 在哪个地方我犯了错误? 运行结果: 线程“main”groovy中出现异常。lang.MissingMethodException:没有方法ua的签名。家插科打诨。用法实例getMyCou

  • 问题内容: 我刚刚升级到角度版本1.3.8。 当使用1.2.23版本时,我创建了一条指令来将数据表单视图转换为模型,反之亦然。 这是我的指令: }); 我在这里看到现在支持绑定中的getter和setter,但是我在任何地方 都 找不到如何同时使用getter 和 setter的方法。有什么办法吗?那就是-ng-model- options可以代替我的convert指令吗? 谢谢 问题答案: 该文