阿西河

所有教程

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

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      JS Proxy get()

      handler.get() 方法用于拦截对象的读取属性操作。

      语法

      var p = new Proxy(target, {
        get: function(target, property, receiver) {
        }
      });
      
      

      参数

      以下是传递给get方法的参数,this上下文绑定在handler对象上.

      target

      目标对象。

      property

      被获取的属性名。

      receiver

      Proxy或者继承Proxy的对象

      返回值

      get方法可以返回任何值。

      描述

      handler.get 方法用于拦截对象的读取属性操作。

      拦截

      该方法会拦截目标对象的以下操作:

      • 访问属性: proxy[foo]和 proxy.bar
      • 访问原型链上的属性: Object.create(proxy)[foo]
      • Reflect.get()

      约束

      如果违背了以下的约束,proxy会抛出 TypeError:

      • 如果要访问的目标属性是不可写以及不可配置的,则返回的值必须与该目标属性的值相同。
      • 如果要访问的目标属性没有配置访问方法,即get方法是undefined的,则返回值必须为undefined。

      示例

      以下代码演示如何拦截属性值的读取操作。

      var p = new Proxy({}, {
        get: function(target, prop, receiver) {
          console.log("called: " + prop);
          return 10;
        }
      });
      
      console.log(p.a); // "called: a"
                        // 10
      
      

      以下代码演示违反约束的情况。

      var obj = {};
      Object.defineProperty(obj, "a", { 
        configurable: false, 
        enumerable: false, 
        value: 10, 
        writable: false 
      });
      
      var p = new Proxy(obj, {
        get: function(target, prop) {
          return 20;
        }
      });
      
      p.a; //会抛出TypeError
      
      

      规范

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

      另见

      目录
      目录