handler.defineProperty()
handler.defineProperty()
用于拦截对象的 Object.defineProperty()
操作。
语法
js
var p = new Proxy(target, {
defineProperty: function (target, property, descriptor) {},
});
参数
下列参数将会被传递给 defineProperty
方法。this
绑定在 handler 对象上。
target
-
目标对象。
property
-
待检索其描述的属性名。
descriptor
-
待定义或修改的属性的描述符。
返回值
defineProperty
方法必须以一个 Boolean
返回,表示定义该属性的操作成功与否。
描述
handler.defineProperty()
用于拦截对对象的 Object.defineProperty()
操作。
拦截
该方法会拦截目标对象的以下操作:
不变量
示例
以下代码演示如何拦截对目标对象的 Object.defineProperty()
操作。
js
var p = new Proxy(
{},
{
defineProperty: function (target, prop, descriptor) {
console.log("called: " + prop);
return true;
},
},
);
var desc = { configurable: true, enumerable: true, value: 10 };
Object.defineProperty(p, "a", desc); // "called: a"
当调用 Object.defineProperty()
或者 Reflect.defineProperty()
,传递给 defineProperty
的 descriptor
有一个限制 - 只有以下属性才有用,非标准的属性将会被无视:
enumerable
configurable
writable
value
get
set
js
var p = new Proxy(
{},
{
defineProperty(target, prop, descriptor) {
console.log(descriptor);
return Reflect.defineProperty(target, prop, descriptor);
},
},
);
Object.defineProperty(p, "name", {
value: "proxy",
type: "custom",
}); // { value: 'proxy' }
规范
Specification |
---|
ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc |
浏览器兼容性
BCD tables only load in the browser