首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Proxy.handler.ownKeys

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

语法

代码语言:javascript
复制
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或a Symbol
  • 结果列表必须包含目标对象的所有不可配置的属性的键。
  • 如果目标对象不可扩展,那么结果List必须包含目标对象自身属性的所有键,而不包含其他值。

示例

以下代码陷阱Object.getOwnPropertyNames()

代码语言:javascript
复制
var p = new Proxy({}, {
  ownKeys: function(target) {
    console.log('called');
    return ['a', 'b', 'c'];
  }
});

console.log(Object.getOwnPropertyNames(p)); // "called"
                                            // [ 'a', 'b', 'c' ]

以下代码违反了不变量。

代码语言:javascript
复制
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()

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com