vue 双向数据绑定原理
博客地址: https://ainyi.com/8
采用defineProperty的两个方法get、set
示例
<!-- 表单 -->
<input type="text" id="input">
<!-- 展示 -->
<p id="desc"></p>
let obj = {};
let temp = {};//采用临时变量代理obj
Object.defineProperty(obj,'name',{
//获取obj的name属性会触发
get(){
return temp['name'];
},
//给obj的name属性赋值会触发
set(val){
temp['name'] = val;//改变temp的结果
input.value = val;//将值赋值到输入框
desc.innerText = val; //将值显示到输入框下面
//obj.name = val; //死循环,不能采取这种方式赋值,采用temp代理方式赋值和取值
}
}); //设置了id值不需要document.getElementById()
//调用上面的set方法,设置初始值
obj.name = "message";
//调用上面的get方法,获取属性值并放到输入框
input.value = obj.name; //输入框的变化时执行,这里不能使用箭头函数,因为箭头函数不绑定this,找的是上下文的this
input.addEventListener('input',function(){
//当值变化时会调用set方法
obj.name = this.value;
});
defineProperty扩展
// Object.defineProperty(obj,'name',{
// configurable:false, //是否可删除
// writable:false, //是否可重新赋值
// enumerable:false,//是否可枚举,false不能for in循环和Object.keys(obj),
// value:1
// });
// Object.keys(obj)返回一个给定对象obj的所有可枚举属性的字符串数组,即obj的属性名数组 // 若有:
let obj2 = {}; // 一方面设置属性和值
obj2.name = 1;
// 等同于:(后三个属性的默认值都是true)
Object.defineProperty(obj2, "name", {
value : 1,
writable : true,
configurable : true,
enumerable : true
}); // 另一方面设置属性和值
Object.defineProperty(obj2, "name", {
value : 1
});
// 等同于:(后三个属性的默认值都是false)
Object.defineProperty(obj2, "name", {
value : 1,
writable : false,
configurable : false,
enumerable : false
});
博客地址: https://ainyi.com/8
vue 双向数据绑定原理的更多相关文章
- vue双向数据绑定原理探究(附demo)
昨天被导师叫去研究了一下vue的双向数据绑定原理...本来以为原理的东西都非常高深,没想到vue的双向绑定真的很好理解啊...自己动手写了一个. 传送门 双向绑定的思想 双向数据绑定的思想就是数据层与 ...
- Vue双向数据绑定原理分析(转)
add by zhj: 目前组里使用的是前端技术是jQuery + Bootstrap,后端使用的Django,Flask等,模板是在后端渲染的.前后端没有分离,这种做法有几个缺点 1. 模板一般是由 ...
- Vue双向数据绑定原理深度解析
首先,什么是双向数据绑定?Vue是三大MVVM框架之一,数据绑定简单来说,就是当数据发生变化时,相应的视图会进行更新,当视图更新时,数据也会跟着变化. 在分析其原理和代码的时候,大家首先了解如下几个j ...
- 手写MVVM框架 之vue双向数据绑定原理剖析
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Vue双向数据绑定原理解析
基本原理 Vue.采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter和getter,数据变动时发布消息给订阅者,触发相应函数的回调 ...
- Vue 双向数据绑定原理分析 以及 Object.defineproperty语法
第三方精简版实现 https://github.com/luobotang/simply-vue Object.defineProperty 学习,打开控制台分别输入以下内容调试结果 userInfo ...
- Vue双向数据绑定原理
https://www.cnblogs.com/kidney/p/6052935.html?utm_source=gold_browser_extension
- 详解 vue 双向数据绑定的原理,并实现一组双向数据绑定
1:vue 双向数据绑定的原理: Object.defineProperty是ES5新增的一个API,其作用是给对象的属性增加更多的控制Object.defineProperty(obj, prop, ...
- vue 双向数据绑定的实现学习(二)- 监听器的实现
废话:上一篇https://www.cnblogs.com/adouwt/p/9928278.html 提到了vue实现的基本实现原理:Object.defineProperty() -数据劫持 和 ...
随机推荐
- 详解node + mongoDb(mongoDb安装、运行,在node中连接、增删改查)
一.序言 好久没写博客了,这次主要聊聊 node 和 mongoDb . 先说明一下技术栈 node + express + mongoose + mongoDb.这篇博客,主要讲述 mongoDb ...
- CentOS 编译安装 Nodejs (实测 笔记 Centos 7.3 + node 6.9.5)
环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso 安装步骤: 1.准备 1.1 显示系统版 ...
- Redmine 安装、搭建
参考两个博客: 1.https://blog.csdn.net/g19881118/article/details/59476045 2.https://www.cnblogs.com/chendal ...
- django 标签的使用
首先重建一个common的app 然后创建__init__使common成为一个包 注意templatetags 名字使固定的 并在下面创建一个名字为fitter的过滤器 注册过滤器app htm ...
- 深港澳大湾区(深圳).NET技术交流会圆满成功
2018年7月7日一场以.NET Core微服务和机器学习为主题的交流会成功在深圳职业技术学院落下帷幕.这次活动在短短的一周时间内,报名人数超过了170人,除了一些同学临时有事,基本都到现场了,特别感 ...
- Zookeeper+Dubbo+SpringMVC环境搭建
项目码云GIT地址:https://gitee.com/xshuai/dubbo/ 开发工具 MyEclipse 10.7 JDK 1.7 容器 Tomcat 8(运行dubbo) zookeeper ...
- [Swift]LeetCode882. 细分图中的可到达结点 | Reachable Nodes In Subdivided Graph
Starting with an undirected graph (the "original graph") with nodes from 0 to N-1, subdivi ...
- 学习Python--变量进阶
变量进阶(理解) 目标 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引 ...
- Redis Windows下查看版本号
1.打开redis所在目录启动 redis-server 服务器端. 2.启动 redis-cli 客户端. 3.客户端输入:info 结果如下:
- BBS论坛(三十一)
31.帖子加精和取消加精功能完成 (1)apps/models.py class HighLight(db.Model): __tablename__='highlight_post' id = db ...