美文网首页
解读:Object.defineProperty

解读:Object.defineProperty

作者: 麦子_FE | 来源:发表于2017-05-17 11:30 被阅读85次

    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

          本文链接:https://www.haomeiwen.com/subject/wecdxxtx.html