vue的数据响应式

70 阅读1分钟

什么是响应式?

响应式就是我打你一拳,你有反应会喊疼,那么你就是响应式的

什么是响应式页面?

如果我改变窗口的大小,网页内容会做出响应,这就是响应式页面

vue的数据响应式?

const vm=new Vue({data:{n:0}}) 如果修改了vm.n,那么ui中的n就会改变,这就是vue的数据响应式

vue数据响应式的实现?

vue通过Object.defineProperty的方法里面的getter和setter方法的观察者模式来实现数据响应式

const vm=new Vue({data:myData})

会让vm成为myData的代理

会对myData的所有属性进行监控

监控的目的是为了防止myData的属性变了,vm不知道

当myData的属性变了就可以调用render(data)对页面进行渲染

getter\setter用法

getter、setter用于对属性的读写进行监控

let obj1={
    姓:'王',
    名:'xiao',
    姓名(){
        return this.姓+this.名
    }
}
console.log(obj1.姓名());

想要删掉 obj1.姓名() 后面的括号,就用到了getter,如下代码

let obj1={
    姓:'王',
    名:'xiao',
    get 姓名(){
        return this.姓+this.名
    }
}
console.log(obj1.姓名);
let obj1={
    姓:'王',
    名:'xiao',
    get 姓名(){
        return this.姓+this.名
    },
    set 姓名(value){
        this.姓=value
    }
}
obj1.姓名='大大'
console.log(obj1.姓名)//大大xiao

总结:setter就是用=value触发set函数

其中这个名字是一个虚拟属性,所以我们看控制台会看到显示成这样--名字(...)

Object.defineProperty的用法

在定义一个对象之后,这个对象已经有get跟set了,但想在他身上添加新的get跟set的时候,就需要用到Object.defineProperty

Object.defineProperty(对象名,'新加的方法名',{
	get(){
  	return xxx
  },
  set(value){
  	xxx=value
  }
})

作用: 可以给对象添加属性value 可以给对象添加getter、setter