前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vue 双向数据绑定原理

vue 双向数据绑定原理

作者头像
Krry
修改2019-04-22 14:48:11
1.3K0
修改2019-04-22 14:48:11
举报
文章被收录于专栏:KrryblogKrryblog

博客地址:https://ainyi.com/8

采用defineProperty的两个方法get、set

示例

1 <!-- 表单 -->
2 <input type="text" id="input">
3 <!-- 展示 -->
4 <p id="desc"></p>
 1 let obj = {};
 2 let temp = {};//采用临时变量代理obj
 3 Object.defineProperty(obj,'name',{
 4     //获取obj的name属性会触发
 5     get(){ 
 6         return temp['name'];
 7     },
 8     //给obj的name属性赋值会触发
 9     set(val){ 
10         temp['name'] = val;//改变temp的结果
11         input.value = val;//将值赋值到输入框
12         desc.innerText = val; //将值显示到输入框下面
13         //obj.name = val; //死循环,不能采取这种方式赋值,采用temp代理方式赋值和取值
14     }
15 });
16 
17 //设置了id值不需要document.getElementById()
18 //调用上面的set方法,设置初始值
19 obj.name = "message";
20 //调用上面的get方法,获取属性值并放到输入框
21 input.value = obj.name;
22 
23 //输入框的变化时执行,这里不能使用箭头函数,因为箭头函数不绑定this,找的是上下文的this
24 input.addEventListener('input',function(){
25     //当值变化时会调用set方法
26     obj.name = this.value;
27 });

defineProperty扩展

 1 // Object.defineProperty(obj,'name',{
 2 //     configurable:false, //是否可删除
 3 //     writable:false, //是否可重新赋值
 4 //     enumerable:false,//是否可枚举,false不能for in循环和Object.keys(obj),
 5 //     value:1
 6 // });
 7 // Object.keys(obj)返回一个给定对象obj的所有可枚举属性的字符串数组,即obj的属性名数组
 8 
 9 // 若有:
10 let obj2 = {};
11 
12 // 一方面设置属性和值
13 obj2.name = 1;
14 // 等同于:(后三个属性的默认值都是true)
15 Object.defineProperty(obj2, "name", {
16     value : 1,
17     writable : true,
18     configurable : true,
19     enumerable : true
20 });
21 
22 // 另一方面设置属性和值
23 Object.defineProperty(obj2, "name", {
24     value : 1 
25 });
26 // 等同于:(后三个属性的默认值都是false)
27 Object.defineProperty(obj2, "name", {
28     value : 1,
29     writable : false,
30     configurable : false,
31     enumerable : false
32 });
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 采用defineProperty的两个方法get、set
    • 示例
    • defineProperty扩展
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档