handler.get()
试一试
语法
js
new Proxy(target, {
get(target, property, receiver) {
}
})
参数
以下参数传递给 get()
方法。this
绑定到处理程序。
target
-
目标对象。
property
-
表示属性名称的字符串或
Symbol
。 receiver
-
getter 的
this
值;请参阅Reflect.get()
。这通常是代理本身或从代理继承的对象。
返回值
get()
方法可以返回任何值,表示属性值。
描述
拦截
不变式
如果处理程序定义违反以下不变式之一,则代理的 [[Get]]
内部方法会抛出一个 TypeError
- 如果目标对象属性是非可写、非可配置的自有数据属性,则报告的属性值必须与相应目标对象属性的值相同。也就是说,如果
Reflect.getOwnPropertyDescriptor()
返回target
上属性的configurable: false, writable: false
,则陷阱必须返回与target
属性描述符中的value
属性相同的值。 - 如果相应目标对象属性是非可配置的自有访问器属性,并且具有未定义的 getter,则报告的属性值必须为
undefined
。也就是说,如果Reflect.getOwnPropertyDescriptor()
返回target
上属性的configurable: false, get: undefined
,则陷阱必须返回undefined
。
示例
获取属性值的陷阱
以下代码捕获获取属性值的操作。
js
const p = new Proxy(
{},
{
get(target, property, receiver) {
console.log(`called: ${property}`);
return 10;
},
},
);
console.log(p.a);
// "called: a"
// 10
以下代码违反了不变式。
js
const obj = {};
Object.defineProperty(obj, "a", {
configurable: false,
enumerable: false,
value: 10,
writable: false,
});
const p = new Proxy(obj, {
get(target, property) {
return 20;
},
});
p.a; // TypeError is thrown
规范
规范 |
---|
ECMAScript 语言规范 # sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。