双向绑定的核心: Object.defineProperty()
Object.defineProperty(obj, prop, descriptor)
方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
obj:要定义属性的对象
prop:要定义或修改的属性的名称或 Symbol
descriptor:要定义或修改的属性描述符
返回值:被传递给函数的对象
我们通过Object.defineProperty的get方法用来获取值 set方法用来拦截设置值
let number = 18
//定义一个对象,可遍历
var person = {name:'yuroll',sex:'nv'};
//添加或修改对象的属性
Object.defineProperty(person, 'age', {
//value:18,
//enumerable:true, //控制属性是否可被枚举,默认为false
//writable:true, //控制属性是否可被修改,默认为false
//configurable:true, //控制属性能否可以被删除,默认为false
//getter=get函数。必须有return值。读取该属性则被调用~
get: function () {
return number;
},
//setter=set函数。修改该属性则被调用~且能收到修改的具体值
set: function (newValue) {
number = newValue;
}
});
obj.hello = 'hello world'
vm实例对象的name属性,其实代理是vm._data.name的,只要vm.name修改,则_data同步更新