无法扩展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'