阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      JS Proxy has()

       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

      其他

      目录
      目录