解读: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内容

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 来自:参 考 原 文 对象是由多个名/值对组成的无序的集...
    wyude阅读 5,008评论 1 7
  • JS基础讲解 JavaScript组成ECMAScript:解释器、翻译DOM:Document Object M...
    FConfidence阅读 3,627评论 0 1
  • 尽管javascript里有大量内建引用对象,很可能你还说会频繁创建自己的对象。当你在这么做的时候,记得javas...
    WanLum阅读 3,493评论 1 3
  • 感谢网络,让我遇到你,这么可爱的你,素未谋面,却让我感到如此安心。人如其名。今天你说想我了,我可以告诉你我也有同...
    瞳小瞳阅读 1,222评论 1 1
  • 第二天。好快呀,种子冒白了,等着长出小芽儿。
    陈田有阅读 1,274评论 0 0