之前有了解过vue的双向绑定,就是通过defineProperty来实现的。现在我们稍微重新巩固一下。
var data = {
name:"lxy"
}, data2 = {};Object.defineProperty(data,'name',{ //defineProperty可以接受三个参数 第一个目标对象,第二个目标键,第三个将被定义或修改的属性的描述符。
set: function (){ //可以接受一个参数就是新的值
console.log("data.name的值发生改变了!");
},
get: function (){ console.log("正在读取data.name的值!");
}
})
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。
})