JavaScript Guidebook

JavaScript 完全知识体系

Proxy - handler.getOwnPropertyDescriptor

handler.getOwnPropertyDescriptor() 方法用于拦截 Object.getOwnPropertyDescriptor(),返回一个属性描述对象或者 undefined

语法

const proxy = new Proxy(target, {
getOwnPropertyDescriptor: function (target, property) {
// do something
},
});
参数说明类型
target目标对象object
property返回属性名称的描述object / undefined

说明

拦截

该方法会拦截目标对象的以下操作:

  • Object.getOwnPropertyDescriptor
  • Reflect.getOwnPropertyDescriptor

约束

如果违背了以下的约束,proxy 会抛出 TypeError:

  • getOwnPropertyDescriptor 必须返回一个 objectundefined
  • 如果属性作为目标对象的不可配置的属性存在,则该属性无法报告为不存在
  • 如果属性作为目标对象的属性存在,并且目标对象不可扩展,则该属性无法报告为不存在
  • 如果属性不存在作为目标对象的属性,并且目标对象的不可扩展,则不能将其报告为存在
  • 属性不能被报告为不可配置,如果它不作为目标对象的自身属性存在,或者作为目标对象的可配置的属性存在
  • Object.getOwnPropertyDescriptor(target) 的结果可以使用 Object.defineProperty 应用于目标对象,也不会抛出异常

示例

const handler = {
getOwnPropertyDescriptor(target, key) {
if (key[0] === '_') {
return;
}
return Object.getOwnPropertyDescriptor(target, key);
},
};
const target = {
_foo: 'bar',
baz: 'tar',
};
const proxy = new Proxy(target, handler);
Object.getOwnPropertyDescriptor(proxy, 'wat');
// undefined
Object.getOwnPropertyDescriptor(proxy, '_foo');
// undefined
Object.getOwnPropertyDescriptor(proxy, 'baz');
// { value: 'tar', writable: true, enumerable: true, configurable: true }