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
Proxy
handler
Object.getOwnPropertyNames()
Reflect.ownKeys()
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com