12Proxy

作者: 我_巨可爱 | 来源:发表于2017-10-30 16:58 被阅读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

相关文章

  • 12Proxy

    概述 proxy 意为代理,在目标对象之前设置一层拦截。当直接访问proxy的对象,没有啥问题。当访问被代理的对象...

网友评论

      本文标题:12Proxy

      本文链接:https://www.haomeiwen.com/subject/gycmpxtx.html