美文网首页
使用Proxy替代Object.defineProperty

使用Proxy替代Object.defineProperty

作者: 泪滴在琴上 | 来源:发表于2022-04-25 10:52 被阅读0次

    为什么使用 Proxy 替代 Object.defineProperty,简单总结Proxy的几点优势

    Proxy 是对整个对象的代理,而 Object.defineProperty 只能代理某个属性
    对象上新增属性,Proxy 可以监听到,Object.defineProperty 不能
    数组新增修改,Proxy 可以监听到,Object.defineProperty 不能
    若对象内部属性要全部递归代理,Proxy 可以只在调用的时候递归,而 Object.definePropery 需要一次完成所有递归,性能比 Proxy 差

    使用也很简单,Proxy本质是构造函数,通过new即可产生对象,它接收两个参数:

    target表示的就是要拦截(代理)的目标对象
    handler是用来定制拦截行为(13种)

    例如响应式reactive的基本实现:

    function reactive(obj) {
        return new Proxy(obj, {
            get(target, key) {
                // 可以做依赖收集
                track(target, key)
                return target[key]
            },
            set(target, key, val) {
                target[key] = val
                // 触发依赖
                trigger(target, key)
            }
        })
    }
    

    作者:LBJ
    链接:https://juejin.cn/post/7072274726940311588
    来源:稀土掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:使用Proxy替代Object.defineProperty

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