捕获器不变式
-
使用捕获器几乎可以改变所有基本方法的行为,但也不是没有限制,根据 ECMAScript 规范,每个捕获的方法都知道目标对象上下文、捕获函数签名,而捕获处理程序的行为必须遵循 “捕获器不变式”, 捕获器不变式因方法不同而异,但通常都会防止捕获器定义出现过于反常的行为。
-
比如,如果一个目标对象有一个不可配置且不可写的数据属性,那么在捕获器返回一个与该属性不同的值时,会抛出 TypeError
const target = {}; Object.defineProperty(target, "foo", { configurable: false, writable: false, value: "bar", }); const handler = { get() { return "qux"; }, }; const proxy = new Proxy(target, handler); console.log(proxy.foo); // TypeError