handler.has() - JavaScript 编辑

 handler.has() 方法是针对 in 操作符的代理方法。

语法

var p = new Proxy(target, {
  has: function(target, prop) {
  }
});

参数

下面是传递给 has 方法的参数. this is bound to the handler.

target
目标对象.
prop
需要检查是否存在的属性.

返回值

has 方法返回一个 boolean 属性的值.

描述

handler.has 方法可以看作是针对 in 操作的钩子.

拦截

这个钩子可以拦截下面这些操作:

  • 属性查询: foo in proxy
  • 继承属性查询: foo in Object.create(proxy)
  • with 检查: with(proxy) { (foo); }
  • Reflect.has()

约束

如果违反了下面这些规则,  proxy 将会抛出 TypeError:

  • 如果目标对象的某一属性本身不可被配置,则该属性不能够被代理隐藏.
  • 如果目标对象为不可扩展对象,则该对象的属性不能够被代理隐藏

示例

下面的代码拦截了 in 操作符.

var p = new Proxy({}, {
  has: function(target, prop) {
    console.log('called: ' + prop);
    return true;
  }
});

console.log('a' in p); // "called: a"
                       // true

下面的代码违反了约束.

var obj = { a: 10 };
Object.preventExtensions(obj);
var p = new Proxy(obj, {
  has: function(target, prop) {
    return false;
  }
});

'a' in p; // TypeError is thrown

规范

SpecificationStatusComment
ECMAScript 2015 (6th Edition, ECMA-262)
[[HasProperty]]
StandardInitial definition.
ECMAScript Latest Draft (ECMA-262)
[[HasProperty]]
Draft

浏览器支持

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support?18 (18)???
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support??18.0 (18)???

其他

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:137 次

字数:6129

最后编辑:7年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文