无法扩展JavaScript的Proxy对象

虽然Proxy对象在JavaScript中似乎可以被任何其他类扩展,但事实并非如此。这是因为代理对象具有非典型的语义,被视为奇异对象。简单来说,这意味着它们没有原型,也不可扩展。

那么如何扩展代理对象呢?你不能。但是,你可以创建一个返回代理对象的类,通过从构造函数中返回它来实现。毕竟,这可能是你想要的行为。

class MyProxy {
  constructor(value) {
    Object.keys(value).forEach(key => (this[key] = value[key]));
    return new Proxy(this, {
      set(object, key, value) {
        console.log(`Called with ${key} = ${value}`);
        object[key] = value;
        return true;
      }
    });
  }
}

const myProxy = new MyProxy({ a: 1 });
myProxy.b = 2; // 输出:'Called with b = 2'