The handler.defineProperty()
method is a trap for the [[DefineOwnProperty]]
object internal method, which is used by operations such as Object.defineProperty()
.
The handler.defineProperty()
method is a trap for the [[DefineOwnProperty]]
object internal method, which is used by operations such as Object.defineProperty()
.
new Proxy(target, { defineProperty(target, property, descriptor) { } });
The following parameters are passed to the defineProperty()
method. this
is bound to the handler.
target
The target object.
property
The name or Symbol
of the property whose description is to be retrieved.
descriptor
The descriptor for the property being defined or modified.
The defineProperty()
method must return a Boolean
indicating whether or not the property has been successfully defined.
This trap can intercept these operations:
Or any other operation that invokes the [[DefineOwnProperty]]
internal method.
If the following invariants are violated, the trap throws a TypeError
when invoked.
Object.defineProperty(target, prop, descriptor)
will not throw an exception. false
return value from the defineProperty()
handler will throw a TypeError
exception. The following code traps Object.defineProperty()
.
const p = new Proxy( {}, { defineProperty(target, prop, descriptor) { console.log(`called: ${prop}`); return true; }, }, ); const desc = { configurable: true, enumerable: true, value: 10 }; Object.defineProperty(p, "a", desc); // "called: a"
When calling Object.defineProperty()
or Reflect.defineProperty()
, the descriptor
passed to defineProperty()
trap has one restriction—only following properties are usable (non-standard properties will be ignored):
enumerable
configurable
writable
value
get
set
const 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 |
Desktop | Mobile | Server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | Deno | Node.js | ||
defineProperty |
49 | 12 | 18 | 36 | 10 | 49 | 18 | 36 | 10 | 5.0 | 49 | 1.0 | 6.0.0 |
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/defineProperty