美文网首页
Reflect反射与代理Proxy

Reflect反射与代理Proxy

作者: 我也不知道啊丶 | 来源:发表于2019-01-05 15:11 被阅读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

    相关文章

      网友评论

          本文标题:Reflect反射与代理Proxy

          本文链接:https://www.haomeiwen.com/subject/fnffrqtx.html