以前有了解过vue的双向绑定,就是经过defineProperty来实现的。如今咱们稍微从新巩固一下。vue
var data = {函数
name:"lxy"
},
data2 = {};双向绑定
Object.defineProperty(data,'name',{ //defineProperty能够接受三个参数 第一个目标对象,第二个目标键,第三个将被定义或修改的属性的描述符。对象
set: function (){ //能够接受一个参数就是新的值ip
console.log("data.name的值发生改变了!");get
},it
get: function (){
console.log("正在读取data.name的值!");io
}console
})table
data.name //正在读取data.name的值! undefined(这是否是说明使用这个方法以后对象被重置了?还在研究...)
data.name = 1 //data.name的值发生改变了!
Object.defineProperty( data2,'name',{
value: 2 , //赋值操做
//相似的操做还有:
// configurable当且仅当该属性的 configurable 为 true 时,该属性描述符才可以被改变,也可以被删除。默认为 false。
//enumerable当且仅当该属性的 enumerable 为 true 时,该属性才可以出如今对象的枚举属性中。默认为 false。
//数据描述符同时具备如下可选键值:value该属性对应的值。能够是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined。这也就是为何writable 当且仅当该属性的 writable 为 true 时,该属性才能被赋值运算符改变。默认为 false。
})