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]'的定义。 | 草案 | |
浏览器兼容性
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | ? | 18 (18) | ? | ? | ? |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | ? | ? | 18.0 (18) | ? | ? | ? |
兼容性说明
火狐
- 在 Gecko 42(Firefox 42 / Thunderbird 42 / SeaMonkey 2.39)中,
ownKey
实现得到更新以反映最终的 ES2015 规范(参见错误1049662
):
See also
Proxy