浅析vue的双向数据绑定

Posted mxyr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅析vue的双向数据绑定相关的知识,希望对你有一定的参考价值。

vue 的双向数据绑定是基于es5的 object对象的defineProperty属性,重写data的set和get函数来实现的。
1、defineProperty 数据展示

技术分享图片
 1 Object.defineProperty(obj,‘name‘,{
 2    configurable:true , // false则不可以删除key值
 3    enumerable:true , // false则在枚举时候会忽略
 4    value:‘xixi‘
 5    writable:true  // false则不可更改key的value值
 6 });
 7 
 8 //writable为false
 9 var obj = {};
10 Object.defineProperty(obj,‘name‘,{
11     value:‘xixi‘
12     writable:false,   
13     configurable:true , 
14     enumerable:true , 
15 });
16 obj.val = ‘西瓜‘;//writable为false,不可以更改。
17 
18 //configurable为false
19 var obj = {};
20 Object.defineProperty(obj,‘name‘,{
21     value:‘xixi‘
22     writable:true,   
23     configurable:false , 
24     enumerable:true , 
25 });
26 obj.val = ‘西瓜‘27 delete obj.val //configurable为false,不可以删除。
28     
29 //enumerable为false
30 var obj = {};
31 Object.defineProperty(obj,‘name‘,{
32     value:‘xixi‘
33     writable:true,   
34     configurable:true , 
35     enumerable:false , 
36 });
37 for(var i in obj) {
38   console.log(obj[i])  // enumerable为false时,不会显示值
39 }
View Code

 

 

2、存取器描述

1 var obj = {};
2 Object.defineProperty(obj,‘name‘,{
3     get:function(){} | undefined,
4     set:function(){} | undefined,
5     configuracble:true | false,
6     enumerable:true | false
7 })
8 //当前使用了setter和getter方法,不许使用writable和value两个属性

当设置获取对象的某个属性的时候,可以提供getter和setter方法

 1 var obj = {};
 2 var value = ‘xixi‘;
 3 object.defineProperty(obj, ‘name‘, {
 4    get: function() {
 5        return value  
 6    },
 7    set: function(val) {
 8        value = val    
 9    }  
10 })
11 console.log(obj.name) // xixi
12 obj.name = ‘西瓜‘;
13 console.log(obj.name) // 西瓜

 


以上是关于浅析vue的双向数据绑定的主要内容,如果未能解决你的问题,请参考以下文章

浅析vue的两项原理

vue双向绑定原理

Vue2从入门到精通详解Vue数据双向绑定原理及手动实现双向绑定

vue数据双向绑定原理-observer

如何初始化片段中的绑定属性以使双向数据绑定工作

VUE底层原理之数据双向绑定