为了账号安全,请及时绑定邮箱和手机立即绑定

为类动态设置 getter 和 setter

为类动态设置 getter 和 setter

白板的微信 2023-11-11 21:37:05
我可以在创建类之后从字符串值外部设置类的属性,如下所示class Class {  //Nothing}let storageClass = new Class();storageClass['value'] = 'Hello World';document.write(storageClass.value);但我需要跟踪所有属性的更改,以便我可以使用get和set,但我无法仅基于 添加新属性storageClass['value'] = 'Hello World';。例如,如果我想做的话,我必须添加 get 和 set 函数storageClass['valueNumberTwo'] = 'A Second Value';class Class {  get value() {    return this._value;  }    set value(value) {    this._value = value;    console.log('Value Changed');  }}let storageClass = new Class();storageClass['value'] = 'Hello World';document.write(storageClass.value);如果我知道创建类时可以创建的所有属性,是否有办法仍然可以做到这一点?
查看完整描述

2 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

您可以使用 aProxy来处理动态获取和设置操作。

class Class {

  constructor() {

    return new Proxy(this, {

      get(target, prop, receiver) {

        return target['_' + prop];

      },

      set(obj, prop, value) {

        obj['_' + prop] = value;

        console.log('value changed');

      }

    });

  }

}

let storageClass = new Class;

storageClass['value'] = 'Hello World';

document.write(storageClass.value);



查看完整回答
反对 回复 2023-11-11
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

get/set您可以使用 ES6 构造为所有属性创建Proxy,它允许您为对象实现低级方法(例如get,在访问任何属性时调用该方法)。


请注意,作为一项 ES6 功能,它具有广泛但不通用的浏览器支持(例如,在 Internet Explorer 中不起作用),并且无法进行多填充,因为它使用的功能在旧版本的 JavaScript 中不存在。


查看完整回答
反对 回复 2023-11-11
  • 2 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信