vue数据双向绑定以及发布订阅的原理(Object.defineProperty/Proxy)

// vue3.0  2019.4.22

使用了Proxy来代替Object.defineProperty,主要是为了解决无法监听到引用类型的值,必须手动set

let proxy = new Proxy(target, handler);

target :是 Proxy的目标对象,可以是任何类型的对象,包括原生数组,函数,甚至另一个代理

// vue3.0之前

我们都清楚vue数据双向绑定原理是基于 Object.defineProperty

数据双向绑定demo

https://github.com/Janenil/souche-project/blob/master/hijacking.html




  
  
  
  Document
  


  

通过get,set,来触发一些回调函数。

Object.defineProperty(data,"b",{
    set:function(value){
        _value=value;
        console.log("setted");
    },
    get:function(){
        return _value;
    }
});

object.defineProperty的使用是有缺陷的,他无法监听到引用类型的值的变化。

你可能感兴趣的:(前端,模式)