12Proxy

概述

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容