解读:Object.defineProperty

Object.defineProperty

vuejs的双向数据绑定就是通过他实现的(划重点!~)

vuejs中data下的属性都添加了set和get,所以数据改变触发set,而set会触发视图更新。computed计算缓存就是这个道理,当data没有改变,computed会将之前计算的结果返回,从而形成计算缓存。

先来个demo:

var a={};

Object.defineProperty(a,"test",{

    value:2017

})

console.log(a.test);//2017

参数详解:

第一个参数:目标参数

第二个参数:需要定义的属性或者方法的名字

第三个参数:目标属性所拥有的特性(descriptor)

其中第三个参数还有以下参数!:

value:value值

writable:如果为false,属性为只读

configurable:总开关,如果为false,就不能在设置(value,writable,configurable 这里划重点!)

enumerable:是否在for in  中遍历出来

set:访问器set

get:访问器get

如果只设置value,相当于:

var a={};

Object.defineProperty(a,"test",{

value:2017,

writable:false,

enumerable:false,

configurable:false

})

console.log(a.test);//2017

但是只设置value,对set和get不起作用。

set和get

如果设置了set和get,就不能设置writable和value,否则会报错。

使用demo:

var a={};

Object.defineProperty(a,"testDemo",{

    set:function(val){

         console.log(val);

    },

    get:function(){

          return  "get内容"

    }

})

a.testDemo="我是set";//我是set

console.log(a.testDemo);//get内容

你可能感兴趣的:(解读:Object.defineProperty)