首页 > 其他 > 详细

【ES6】Proxy

时间:2020-02-09 14:05:31      阅读:72      评论:0      收藏:0      [点我收藏+]

Proxy代理器

Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。

Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。

var obj = new Proxy({}, {
  get: function (target, propKey, receiver) {
    console.log(`getting ${propKey}!`);
    return Reflect.get(target, propKey, receiver);
  },
  set: function (target, propKey, value, receiver) {
    console.log(`setting ${propKey}!`);
    return Reflect.set(target, propKey, value, receiver);
  }
});

重定义了属性的读取(get)和设置(set)行为。Proxy 实际上重载(overload)了点运算符,即用自己的定义覆盖了语言的原始定义。

var proxy = new Proxy(target, handler);

target为拦截的目标对象,handler参数也是一个对象,用来定制拦截行为。如果handler没有设置任何拦截,那就等同于直接通向原对象。

要使得Proxy起作用,必须针对Proxy实例进行操作,而不是针对目标对象进行操作。

一个技巧是将 Proxy 对象,设置到object.proxy属性,从而可以在object对象上调用。

var object = { proxy: new Proxy(target, handler) };

Proxy 实例也可以作为其他对象的原型对象。

var proxy = new Proxy({}, {
  get: function(target, propKey) {
    return 35;
  }
});

let obj = Object.create(proxy);
obj.time // 35

详细参考:http://es6.ruanyifeng.com/#docs/proxy

 

【ES6】Proxy

原文:https://www.cnblogs.com/Mijiujs/p/12286581.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!