在目前的前端面试中,vue的双向数据绑定已经成为了一个非常容易考到的点,即使不能当场写出来,至少也要能说出原理。本篇文章中我将会仿照vue写一个双向数据绑定的实例,名字就叫myVue吧。结合注释,希望能让大家有所收获。

1、原理
Vue的双向数据绑定的原理相信大家也都十分了解了,主要是通过 Object对象的defineProperty属性,重写data的set和get函数来实现的,这里对原理不做过多描述,主要还是来实现一个实例。为了使代码更加的清晰,这里只会实现最基本的内容,主要实现v-model,v-bind 和v-click三个命令,其他命令也可以自行补充。

添加网上的一张图

2、实现
页面结构很简单,如下:

<div id="app"><form><input type="text" v-model="number"><button type="button" v-click="increment">增加</button></form><h3 v-bind="number"></h3>
</div> 

包含:

一个input,使用v-model指令

一个button,使用v-click指令

一个h3,使用v-bind指令。

我们最后会通过类似于vue的方式来使用我们的双向数据绑定,结合我们的数据结构添加注释:

var app =
new myVue({el: '#app',data:{number:0},methods:{increment:function(){this.number++;},}
})

首先我们需要定义一个myVue构造函数:

function myVue(options){}

为了初始化这个构造函数,给它添加一个 _init 属性:

function myVue(options){this._init(options);
}
myVue.prototype._init =function(options){this.$options = options;// options 为上面使用时传入的结构体,包括el,data,methodsthis.$el = document.querySelector(options.el); // el是 #app, this.$el是id为app的Element元素this.$data = options.data;// this.$data = {number: 0}this.$methods = options.methods; // this.$methods = {increment: function(){}}
}

接下来实现 _obverse 函数,对data进行处理,重写data的set和get函数:

并改造_init函数

参考网址:https://mp.weixin.qq.com/s/MGsEGejaADVHGlZFYQgCnQ

Vue 的双向数据绑定原理解析相关推荐

  1. 【Vue的双向数据绑定原理】

    Vue的双向数据绑定原理 先说面试答案: 1. 什么是setter.getter 2. 什么是Object.defineProperty() ? 先简单的实现一个js的双向数据绑定来熟悉一下`Obje ...

  2. Vue的双向数据绑定原理(极简版)

    先说面试答案: 答: vue.js是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者 ...

  3. 【Vue】双向数据绑定原理 vue2.0 与 vue3.0

    目录 一.什么是双向数据绑定? 二.双向数据绑定原理 vue2.0 三.Vue 3.0使用ES6的新特性porxy 四.思考 一.什么是双向数据绑定? vue是一个mvvm框架,即数据双向绑定,即当数 ...

  4. 剖析Vue实现双向数据绑定原理

    几种实现双向绑定的做法 目前几种主流的mvc(vm)框架都实现了单向数据绑定,而我所理解的双向数据绑定无非就是在单向绑定的基础上给可输入元素(input.textare等)添加了change(inpu ...

  5. Vue的双向数据绑定原理是什么

    在vue2.x中,双向数据绑定是通过数据劫持 结合 发布订阅模式的方式来实现的,也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之改变.核心:关于Vue双向数据绑定,其核心是Ob ...

  6. angularjs双向数据绑定原理解析

    angularjs的双向数据绑定 脏值(发生了变化的值)检查不等于定时轮询,而是特定事件触发才会执行 只有指定事件触发后才会进入脏值轮询. - DOM事件,譬如用户输入文本,点击按钮等.(ng-cli ...

  7. VUE的双向数据绑定原理

    vue.js是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调来 ...

  8. Vue的双向数据绑定原理是什么?(前端面试题)

    一.vue2.x 是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听 ...

  9. vue双向数据绑定原理分析--Mr.Ember

    vue双向数据绑定原理分析 摘要 vue常用,但原理常常不理解,下面我们来具体分析下vue的双向数据绑定原理. (1)创建一个vue对象,实现一个数据监听器observer,对所有数据对象属性进行监听 ...

最新文章

  1. ajax传formdata类型的数据_JQuery.Ajax()的data参数类型
  2. 项目发布错误的解决方法
  3. 图片的base64编码实现以及网页上显示
  4. php课程 8-28 php如何绘制生成显示图片
  5. 互联网“高薪榜”曝光,物联网将接棒?
  6. linux系统安装如何设置raid,在RAID磁盘阵列下如何搭建Linux系统
  7. 不会优化数据库,早晚被优化!
  8. 数据库学习一站式入门资料(纯干货)
  9. 创新企业如何“跨越鸿沟”?
  10. 基于php的外卖订餐系统开题报告_网上订餐系统开题报告
  11. 智能控制基础(6):自动控制原理第五版第二章答案(部分)
  12. 数字系统设计中形式验证
  13. java pdf中插入图片
  14. Ext中TextField的 label和feild的间距的设定
  15. 宏碁(Acer)蜂鸟Fun 2020新款 14英寸轻薄商务笔记本使用真实评测
  16. Excel找回打开密码过程
  17. Java实现交叉表_Sql交叉表简单实现 | 学步园
  18. 医院考勤签到系统设计与实现
  19. 程序员的每一根头发珍贵稀少到都有自己的名字!
  20. JAVA day02代码(条件控制语句部分)

热门文章

  1. java入门(Collection、泛型)
  2. 利用ContentProvider和ContentResolver达到QQ换肤以及数据共享查询(暂无内容)
  3. BNB 测试网络配置
  4. 计算机人工智能的发展探究
  5. RPN网络的anchor机制
  6. 2021年安全员-B证报名考试及安全员-B证考试内容
  7. 转载从CEGUI源码看代码规范
  8. 百度搜索中台新一代内容架构:FaaS化和智能化实战
  9. Linux移植烧写内核:movi、nand、fastboot、sdfuse命令与分区表(fdisk)、mmc命令之间的关系
  10. spark:spark-submit 提交任务及参数说明(yarn)