关于defineProperty的一点理解

以前有了解过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。

})

相关文章
相关标签/搜索