proxy
vue
源码的render部分,曾用到proxy
来代理vue的实例。
1 概念:
proxy
原意就有代理的意思。它是外界访问对象的一层代理控制
,也是对访问的一种改写和过滤
。属于一种元编程
。
2 作用:
可以从获取和设置两种时机去代理指定对象
3 代码结构:
标准结构:
var proxy = new Proxy (target, handler); // target是拦截的目标 handler是拦截行为
1 | var obj = new Proxy({ |
4. 要注意的点:
要使proxy起作用,需对proxy的实例 进行操作,而不是针对原目标对象。
与原型的应用:
1
2
3
4
5
6
7
8
9var proxy = new Proxy({}, {
get: function(target, property) {
return 35
},
})
let _obj = Object.create(proxy)
_obj.time // 35
// proxy对象是_obj的原型,_obj上没有time这个属性,就顺着原型链找到proxy,proxy上的任何属性都会返回35
5. proxy还支持get、set之外的api补充
1 | var handler = { |
1 | // get 拦截 负数索引 |
6. 属性需可配置,configuable 和 可写writable,否则proxy实例访问代理这个属性会报错 (也是一条可以阻止proxy的法子)
1 | const target = Object.defineProperties({}, { |
引申了解:
- 元编程的概念
- proxy的get和set,与 Object.defineProperty 相比,有什么区别
- 答:jueim proxy的应用场景更多,但是define的兼容性更好
- 答:issue
- 答:两者实现双向绑定差异
- 本文标题:proxy
- 本文作者:Jonnzer
- 创建时间:2020-06-14 14:50:21
- 本文链接:https://jonnzer.github.io/2020/06/14/proxy/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
评论