先看看Reflect有多少属性方法
:)
可以看到
myReceiverObject
上原本没有baz()
方法,通过Reflect.get()
方法,从myObject
上拿到baz()
方法然后映射到myReceiverObject
里。如果
myObject
的baz()
不是get
函数而是一个普通的函数,就可以用call()
直接调用,无需用Reflect.get()
所以Reflect.set()
与Reflect.get()
相反
Reflect.apply()
意思是调用这个函数-
Math.min
,this
是undefined
,参数是[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
网友评论