12Proxy

2017-10-30  本文已影响0人  我_巨可爱

概述

proxy 意为代理,在目标对象之前设置一层拦截。当直接访问proxy的对象,没有啥问题。当访问被代理的对象,其实是从proxy那里拿答案

基础使用

var person = {
    name: 'yf'
}
var proxy = new Proxy(person,{
    get: function (target,property) {
        if (property in target) {
            return target[property];
        }else {
            throw new ReferenceError("Property \" "+property + "\" does not exist.");
        }
    }
});
proxy.name  // yf
proxy.age   // 报错

注意点

  1. Proxy的第二个参数为{},那么proxy对象直达代理对象
  2. 当属性不可读和不可配置时,使用proxy代理报错

可代理方法

下面时可以代理的方法,但是参数各有不同。同时可能涉及到Reflect

  1. get(target,propKey,receiver)
  2. set(target,propKey,value,receiver)
  3. has(target,propKey)
  4. deleteProperty(target,propkey)
  5. ownKeys(target)
  6. getOwnPropertyDescriptor(target,propKey)
  7. defineProperty(target, propKey, propDesc)
  8. preventExtensions(target)
  9. getPrototypeOf(target)
  10. isExtensible(target)
  11. setPrototypeOf(target, proto)
  12. apply(target, object, args)
  13. construct(target, args)

this

在Proxy代理的情况下,目标对象内部的this指向proxy代理

const target = {
    m: function () {
        console.log(this === proxy);
    }
};
const handler = {};
const proxy = new Proxy(target,handler);

target.m()  // false
prox.m()   // true
上一篇 下一篇

猜你喜欢

热点阅读