Reflect反射与代理Proxy

2019-01-05  本文已影响0人  我也不知道啊丶

先看看Reflect有多少属性方法


:)
可以看到myReceiverObject上原本没有baz()方法,通过Reflect.get()方法,从myObject上拿到baz()方法然后映射到myReceiverObject里。
如果myObjectbaz()不是get函数而是一个普通的函数,就可以用call()直接调用,无需用Reflect.get()

所以Reflect.set()Reflect.get()相反

Reflect.apply()


意思是调用这个函数-Math.minthisundefined,参数是[1,2,3]
等于是
Math.min.apply(undefined,[1,2,3])

我觉得可以这样理解(不要纠结语法是否正确,大概意思)

obj.name == obj.get('name') == Reflect.get('obj','name')

obj.name='xxx' == obj.set('name','xxx') == Reflect.set('obj','name','xxx')

obj.apply(this,args) == Reflect.apply(obj,this,args)

Reflect.construct()相当于是new


注意,使用 Reflect.construct()方法,必须传入参数,且是数组

代理 Proxy


通过访问代理proxy来读取和设置beiProxy

再看看另外一个例子
如果有一个空对象var tree = {},要给这个对象设置tree.branch1.branch2.leave = '绿色'该怎么做?直接设置是不行的


好,如果你一步一步设置完了,然后又来了一个新需求,需要设置tree.branch8.branch9.leave = '红色'呢?
所以,这个时候可以用代理来帮忙解决问题

使用代理就完美解决这个问题了
阮一峰
无限代理Tree
上一篇下一篇

猜你喜欢

热点阅读