The handler.defineProperty()
method is a trap for Object.defineProperty()
.
var p = new Proxy(target, { defineProperty: function(target, property, descriptor) { } });
The following parameters are passed to the defineProperty
method. this
is bound to the handler.
target
property
Symbol
of the property whose description is to be retrieved.descriptor
The defineProperty
method must return a Boolean
indicating whether or not the property has been successfully defined.
The handler.defineProperty()
method is a trap for Object.defineProperty()
.
This trap can intercept these operations:
If the following invariants are violated, the proxy will throw a TypeError
:
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()
.
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"
When calling Object.defineProperty()
or Reflect.defineProperty()
, the descriptor
passed to defineProperty
trap has one restriction - only following properties are usable, nonstandard properties will be ignored:
enumerable
configurable
writable
value
get
set
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 | Status | Comment |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) The definition of '[[DefineOwnProperty]]' in that specification. | Standard | Initial definition. |
ECMAScript Latest Draft (ECMA-262) The definition of '[[DefineOwnProperty]]' in that specification. | Draft |
Desktop | ||||||
---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | |
Basic support | 49 | 12 | 18 | No | 36 | 10 |
Mobile | |||||||
---|---|---|---|---|---|---|---|
Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
Basic support | 49 | 49 | Yes | 18 | 36 | 10 | 5.0 |
Server | |
---|---|
Node.js | |
Basic support | 6.0.0 |
© 2005–2018 Mozilla Developer Network and individual 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/handler/defineProperty