• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • handler.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
    

    上篇:Proxy.revocable()

    下篇:handler.set()