handler.defineProperty()
method is a trap for
Object.defineProperty()
.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
const p = new Proxy(target, {
defineProperty: function(target, property, descriptor) {
}
});
The following parameters are passed to the
defineProperty()
方法。
this
is bound to the handler.
target
The target object.
property
Symbol
of the property whose description is to be retrieved.
descriptor
The descriptor for the property being defined or modified.
defineProperty()
method must return a
布尔
indicating whether or not the property has been successfully defined.
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
异常。
The following code traps
Object.defineProperty()
.
const p = new Proxy({}, {
defineProperty: function(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()
,
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' }
| 规范 |
|---|
|
ECMAScript (ECMA-262)
The definition of '[[DefineOwnProperty]]' in that specification. |
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
defineProperty
|
Chrome 49 | Edge 12 | Firefox 18 | IE No | Opera 36 | Safari 10 | WebView Android 49 | Chrome Android 49 | Firefox Android 18 | Opera Android 36 | Safari iOS 10 | Samsung Internet Android 5.0 | nodejs 6.0.0 |
完整支持
不支持