Proxy

Proxy 是 ES6 中新增的功能,可以用来自定义对象中的操作

  1. let p = new Proxy(target, handler);
  2. // `target` 代表需要添加代理的对象
  3. // `handler` 用来自定义对象中的操作

可以很方便的使用 Proxy 来实现一个数据绑定和监听

  1. let onWatch = (obj, setBind, getLogger) => {
  2. let handler = {
  3. get(target, property, receiver) {
  4. getLogger(target, property)
  5. return Reflect.get(target, property, receiver);
  6. },
  7. set(target, property, value, receiver) {
  8. setBind(value);
  9. return Reflect.set(target, property, value);
  10. }
  11. };
  12. return new Proxy(obj, handler);
  13. };
  14. let obj = { a: 1 }
  15. let value
  16. let p = onWatch(obj, (v) => {
  17. value = v
  18. }, (target, property) => {
  19. console.log(`Get '${property}' = ${target[property]}`);
  20. })
  21. p.a = 2 // bind `value` to `2`
  22. p.a // -> Get 'a' = 2