1、关于双向数据绑定
在前端开发中采用MVVM模式时,通常需要编写代码,将从服务器获取的数据进行“渲染”,展现到视图上。每当数据有变更时,会再次进行渲染,从而更新视图,使得视图与数据保持一致。
另一方面,页面也会通过用户的交互,产生状态、数据的变化,这个时候,将视图对数据的更新同步到数据和后台服务器。
2、如何回答
vue.js是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调来渲染视图。并且,由于是在不同的数据上触发同步,可以精确的将变更发送给绑定的视图,而不是对所有的数据都执行一次检测。
3、Object.defineProperty()
.Object.defineProperty() 方法 直接在一个对象上定义一个新的属性
他有三个参数
.Object.defineProperty(obj,prop,descriptor)
obj 是定义属性的对象
prop 是定义的属性名
descriptor 属性描述符
1.数据描述符
configurable 是否重新配置(删除) 布尔
enumerable 是否可枚举 布尔 (for in for of object.keys())
value 默认值
writable 是否可写 布尔
2.访问(存取)描述符
get set
它的返回值是被操作的对象 也就是obj参数
有两个回调函数 get set 访问(存取)描述符
Object.defineProperty(obj,prop,{
configurable:false,
enumerable:false,
writable:false,
get:function(){
//获取数据
return val
},
set:function(val){
//设置数据
},
})