当前位置:首页 > 日记 > 正文

vue.js利用Object.defineProperty实现双向绑定

vue.js利用Object.defineProperty实现双向绑定

Object.defineProperty这个方法了不起啊,vue.js是通过它实现双向绑定的。。而且Object.observe也被草案发起人撤回了。。所以defineProperty更有必要了解一下了。

几行代码看他怎么用

var a= {}Object.defineProperty(a,"b",{ value:123})console.log(a.b);//123

很简单,它接受三个参数,而且都是必填的。。

传入参数

第一个参数:目标对象
第二个参数:需要定义的属性或方法的名字。
第三个参数:目标属性所拥有的特性。(descriptor)

前两个参数不多说了,一看代码就懂,主要看第三个参数descriptor,看看有哪些取值

descriptor

他又以下取值,我们简单认识一下,后面例子,挨个介绍。

  • value:属性的值(不用多说了)
  • writable:如果为false,属性的值就不能被重写,只能为只读了
  • configurable:总开关,一旦为false,就不能再设置他的(value,writable,configurable)
  • enumerable:是否能在for...in循环中遍历出来或在Object.keys中列举出来。
  • get:一会细说
  • set:一会细说

descriptor 默认值

我们再看看第一个例子

var a= {}Object.defineProperty(a,"b",{ value:123})console.log(a.b);//123

我们只设置了 value,别的并没有设置,但是第一次的时候 可以简单的理解为(暂时这样理解)它会默认帮我们把writable,configurable,enumerable。都设上值,而且值还都是false。。也就是说,上面代码和下面是等价的的(仅限于第一次设置的时候)。

var a= {}Object.defineProperty(a,"b",{ value:123, writable:false, enumerable:false, configurable:false})console.log(a.b);//123

以上非常重要哦。。并且以上理解对set 和 get 不起作用哦

configurable

总开关,第一次设置 false 之后,,第二次什么设置也不行了,比如说

var a= {}Object.defineProperty(a,"b",{ configurable:false})Object.defineProperty(a,"b",{ configurable:true})//error: Uncaught TypeError: Cannot redefine property: b

就会报错了。

注意上面讲的默认值。。。如果第一次不设置它会怎样。。会帮你设置为false。。所以。。第二次。再设置他会怎样?。。对喽,,会报错

writable

如果设置为fasle,就变成只读了。

var a = {}; Object.defineProperty(o, "b", {  value : 123, writable : false });console.log(a.b); // 打印 37a.b = 25; // 没有错误抛出(在严格模式下会抛出,即使之前已经有相同的值)console.log(o.a); // 打印 37, 赋值不起作用。

enumerable

属性特性 enumerable 定义了对象的属性是否可以在 for...in 循环和 Object.keys() 中被枚举。

var a= {}Object.defineProperty(a,"b",{ value:3445, enumerable:true})console.log(Object.keys(a));// 打印["b"]

改为false

var a= {}Object.defineProperty(a,"b",{ value:3445, enumerable:false //注意咯这里改了})console.log(Object.keys(a));// 打印[]

for...in 类似,不赘述了

set 和 get

在 descriptor 中不能同时设置访问器(get 和 set)和 wriable 或 value,否则会错,就是说想用 get 和 set,就不能用 writable 或 value 中的任何一个。

set 和 get,他俩干啥用的的。

var a= {}Object.definePrope`请输入代码`rty(a,"b",{ set:function(newValue){ console.log("你要赋值给我,我的新值是"+newValue) }, get:function(){ console.log("你取我的值") return 2 //注意这里,我硬编码返回2 }})a.b =1 //打印 你要赋值给我,我的新值是1console.log(a.b) //打印 你取我的值     //打印 2 注意这里,和我的硬编码相同的

简单来说,这个 “b” 赋值或者取值的时候会分别触发 set 和 get 对应的函数。

这就是实现observe的关键啊。

下一篇,我会分析vue的observe的实现源码,聊聊自己如何一步一步实现$watch。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关文章

word2013解决中文双引号变成英文的

word2013解决中文双引号变成英文的

中文,双引号,两种,英文,技巧,  Word2013经常在输入中文双引号时,前半个双引号还是是中文格式的双引号,但在后半个双引号时就变成了英文格式的双引号,如下图所示很不协调。那么下面就由小编给大家分享下word2013中解决中文双引号变成英文双引…

服务器选购十大术语解释

服务器选购十大术语解释

术语,解释,服务器,十大,电脑软件,  我们将对服务器选购时最令选购者产生困惑的10个概念 加以解释,希望能够对购买者以后的购买活动提供参考。1.企业(Enterprise):指任何大中小型公司(或者非赢利组织以及政府机关)。一般地,我们更频繁的使用…

PPT与Excel交互VBA法是什么

PPT与Excel交互VBA法是什么

交互,电脑软件,PPT,Excel,VBA,  PowerPoint和Office其他格式文件交换数据最好的方法是通过VBA,因为这句话,很多朋友来信询问用VBA如何实现PPT与Excel连接。以下是小编为您带来的关于PPT与Excel交互之VBA法,希望对您有所帮助。PPT与Excel交互…

IIS不支持APK文件下载的解决办法

IIS不支持APK文件下载的解决办法

文件下载,不支持,解决办法,电脑软件,IIS,将安卓android客户端程序.apk文件上传到网站上后,发现竟然无法下载。.apk就是安卓应用的后缀名,一般通过手机直接输入apk的网址,就可以下载。但是默认情况下,使用IIS作为Web服务器的网站无法下载apk文件…

javascript  删除select中的所有op

javascript 删除select中的所有op

删除,实例,电脑软件,javascript,option,javascript 删除select中的所有option的实例方法一:function DeleteOptions() { var obj = document.getElementsByTagName("select")[0]; var selectOptions = obj.options; var op…

iscroll动态加载数据完美解决方法

iscroll动态加载数据完美解决方法

动态加载,解决方法,数据,完美,电脑软件,本文实例为大家分享了iscroll动态加载数据的具体代码,供大家参考,具体内容如下<div id="wrapper" class="margin-b90"> <div id="scroller"> <div id="pullDown"> <span class=…

javascript 日期相减-在线教程 |

javascript 日期相减-在线教程 |

日期,代码,在线教程,相减,电脑软件,代码如下:<script LANGUAGE="JavaScript"> <!-- //说明:这里用了Math.ceil()函数,向上取整,即零头算一天,^_^ var strDate1 = "2003-06-17 03:03:40.0"; var strDate2 = "2004-09-18 12:03:12.0"; s…

关于JavaScript中forEach和each用

关于JavaScript中forEach和each用

电脑软件,JavaScript,forEach,本文主要给大家介绍了关于JavaScript中forEach和each的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍:forEach是ES5中操作数组的一种方法,主要功能是遍历数组,例如:var arr = [1,2,3,4];arr.fo…

wps表格如何移动单元格

wps表格如何移动单元格

方法,单元格,表格,电脑软件,wps,  在使用wps办公软件制作表格时,有时由于自己的疏忽大意,可能忘记了还有其它选项需要添加,这个时候就需要考虑下移单元格了,那么wps表格如何下移单元格呢?接下来小编就给大家介绍一种移动单元格的方法。wps表…

qq空间访问设置在哪里

qq空间访问设置在哪里

空间,设置,访问权限,途径,电脑软件,  qq空间访问权限设置在哪里?很多朋友希望自己的空间内容只让好友或者是最亲密的人看到,这个时候就需要设置QQ空间的访问权限,来控制那些人可以看到自己空间的内容。今天小编分享了设置qq空间访问权限的…

WPS表格2013自动计分出题的模板怎

WPS表格2013自动计分出题的模板怎

模板,表格,试题,积分,电脑软件,  出试题,评分在上学的时候,都是老师要做的事。WPS表格2013不但可以制作自动出题,还可以制作自动积分的试题。以下是小编为您带来的关于WPS表格2013制作自动出题自动积分的试题,希望对您有所帮助。WPS表格2013…

cdr表格怎么制作? cdr调整表格的教

cdr表格怎么制作? cdr调整表格的教

教程,调整,表格,电脑软件,cdr,用CorelDRAW制作有表格的图片真方便,下面我们就来看看实例教程。软件名称:CorelDRAW X4 简体中文正式破解安装版(附注册序列号)软件大小:97MB更新时间:2016-05-161、创建表格,表格内双击,输入文字信息内容2、选中表…