关于defineProperty的一点理解

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

})

 

posted @ 2018-04-10 09:51  xyyyy  阅读(989)  评论(0编辑  收藏  举报