在线文档教程

Proxy.handler.ownKeys

Proxy.handler.ownKeys

handler.ownKeys()方法是一个Reflect.ownKeys()陷阱。

语法

var p = new Proxy(target, { ownKeys: function(target) { } }

参数

以下参数传递给ownKeys方法。this绑定到处理程序。

target目标对象。

返回值

ownKeys方法必须返回一个枚举对象。

描述

handler.ownKeys()方法是一个陷阱Reflect.ownKeys()

拦截

这个陷阱可以拦截这些操作:

  • Object.getOwnPropertyNames()

不变

如果以下不变式被违反,代理将抛出TypeError

  • 结果ownKeys必须是数组。

示例

以下代码陷阱Object.getOwnPropertyNames()

var p = new Proxy{}, { ownKeys: function(target) { console.log('called' return ['a', 'b', 'c']; } } console.log(Object.getOwnPropertyNames(p) // "called" // [ 'a', 'b', 'c' ]

以下代码违反了不变量。

var obj = {}; Object.defineProperty(obj, 'a', { configurable: false, enumerable: true, value: 10 } var 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

产品规范

规范状态评论
ECMAScript 2015(第6版,ECMA-262)该规范中'[OwnPropertyKeys]'的定义。标准初始定义。
ECMAScript 2017草案(ECMA-262)该规范中'[OwnPropertyKeys]'的定义。草案

浏览器兼容性

FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support?18 (18)???

FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support??18.0 (18)???

兼容性说明

火狐

  • 在 Gecko 42(Firefox 42 / Thunderbird 42 / SeaMonkey 2.39)中,ownKey实现得到更新以反映最终的 ES2015 规范(参见错误1049662):

See also

  • Proxy