The handler.ownKeys()
method is a trap for Reflect.ownKeys()
.
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.
Syntax
const p = new Proxy(target, { ownKeys: function(target) { } });
Parameters
The following parameter is passed to the ownKeys()
method. this
is bound to the handler.
target
- The target object.
Return value
The ownKeys()
method must return an enumerable object.
Description
The handler.ownKeys()
method is a trap for Reflect.ownKeys()
.
Interceptions
This trap can intercept these operations:
Invariants
If the following invariants are violated, the proxy will throw a TypeError
:
- The result of
ownKeys()
must be an array. - The type of each array element is either a
String
or aSymbol
. - The result List must contain the keys of all non-configurable own properties of the target object.
- If the target object is not extensible, then the result List must contain all the keys of the own properties of the target object and no other values.
Examples
Trapping of getOwnPropertyNames
The following code traps Object.getOwnPropertyNames()
.
const p = new Proxy({}, { ownKeys: function(target) { console.log('called'); return ['a', 'b', 'c']; } }); console.log(Object.getOwnPropertyNames(p)); // "called" // [ 'a', 'b', 'c' ]
The following code violates an invariant.
const obj = {}; Object.defineProperty(obj, 'a', { configurable: false, enumerable: true, value: 10 } ); const p = new Proxy(obj, { ownKeys: function(target) { return [123, 12.5, true, false, undefined, null, {}, []]; } }); console.log(Object.getOwnPropertyNames(p)); // TypeError: proxy [[OwnPropertyKeys]] must return an array // with only string and symbol elements
Specifications
Specification |
---|
ECMAScript (ECMA-262) The definition of '[[OwnPropertyKeys]]' in that specification. |
Browser compatibility
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Desktop | Mobile | Server | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ownKeys | Chrome Full support 49 | Edge Full support 12 | Firefox
Full support
18
| IE No support No | Opera Full support 36 | Safari Full support 10 | WebView Android Full support 49 | Chrome Android Full support 49 | Firefox Android
Full support
18
| Opera Android Full support 36 | Safari iOS Full support 10 | Samsung Internet Android Full support 5.0 | nodejs Full support 6.0.0 |
Legend
- Full support
- Full support
- No support
- No support
- See implementation notes.
- See implementation notes.