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()Object.getOwnPropertySymbols()Object.keys()Reflect.ownKeys()
不变
如果以下不变式被违反,代理将抛出TypeError:
- 结果
ownKeys必须是数组。 - 每个数组元素的类型是a
String或aSymbol。 - 结果列表必须包含目标对象的所有不可配置的属性的键。
- 如果目标对象不可扩展,那么结果List必须包含目标对象自身属性的所有键,而不包含其他值。
示例
以下代码陷阱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
ProxyhandlerObject.getOwnPropertyNames()Reflect.ownKeys()
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com

