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() -数据劫持 和 ...
随机推荐
- 使用Spring Aop自定义注解实现自动记录日志
百度加自己琢磨,以下亲测有效,所以写下来记录,也方便自己回顾浏览加深印象之类,有什么问题可以评论一起解决,不完整之处也请大佬指正,一起进步哈哈(1)首先配置文件: <!-- 声明自动为sprin ...
- md5 加密文件
import hashlibimport os def get_md5(file_path): md5 = None if os.path.isfile(file_path): f = open(fi ...
- DP-01背包
题目传送门 题目类似01背包,但存在一个选取先后不同价值会有损耗,所有对物品按易损耗的程度从大到小排个序来顺序选取. #include<bits/stdc++.h> using names ...
- [LeetCode] Buddy Strings 伙计字符串
Given two strings A and B of lowercase letters, return true if and only if we can swap two letters i ...
- docker 安装 zookeeper
镜像下载hub.docker.com 上有不少 ZK 镜像, 不过为了稳定起见, 我们就使用官方的 ZK 镜像吧.首先执行如下命令: docker pull zookeeper当出现如下结果时, 表示 ...
- 使用Apache服务部署静态网站
1970年,作为互联网前身的ARPANET(阿帕网)已初具雏形,并开始向非军用部门开放,许多大学和商业部门开始接入.虽然彼时阿帕网的规模(只有4台主机联网运行)还不如现在的局域网成熟,但是它依然为网络 ...
- 使用 TRESTClient 与 TRESTRequest 作为 HTTP Client
在 Delphi XE 推出以前的年代,Delphi的发展方向是笔直朝向资料库连结Windows 应用程式这个目标不断前进的,从Delphi 1开始,到Delphi 7,Delphi奠定了VB Kil ...
- filter 过滤器 禁止浏览器缓存
public class BrowserNoCacheFilter implements Filter { public void init(FilterConfig filterconfig) th ...
- Windows10获取VS管理员权限总是很烦人
之前在Windows 7中,只要关闭了UAC,给当前账户管理员权限,任何程序都会以管理员身份启动.现在,在Windows 10上就行不通了.而VS又需要管理员权限才能使用附加调试等一些功能.虽然我们可 ...
- 在 Ubuntu 中使用 Visual Studio Code
前言 我一直在 Linux 桌面系统下的探索寻找各种界面美观.使用舒适的软件工具.对于Linux下的开发人员来讲,这几年最大的福利就是 MicroSoft 推出的 Visual Studio Code ...