vue双向绑定原理(简单实现原理附demo)
先上效果图
简单的实现数据的双向绑定
首先来了解一个东西:Object.defineProperty()
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty这里是MDN对这个的详细说明
简单点说:
这个方法可以修改现有对象属性的值
Object.defineProperty(obj, prop, descriptor)
参数说明:
    obj:定义属性的对象
    prop:修改的属性
    descriptor:修改的属性描述符
这边只挑最简单的说,
get:
官方:一个给属性提供 getter 的方法,如果没有 getter 则为 undefined。当访问该属性时,该方法会被执行,方法执行时没有参数传入,但是会传入this对象(由于继承关系,这里的this并不一定是定义该属性的对象)。默认为 undefined。
**简单的说:当你需要取对象的属性值时,就是来调用这个函数,取到值的**
set:
官方:一个给属性提供 setter 的方法,如果没有 setter 则为 undefined。当属性值修改时,触发执行该方法。该方法将接受唯一参数,即该属性新的参数值。默认为 undefined。
**简单的说:当你需要设置(改变)对象的属性值时,就是来调用这个函数,达到修改的**
接下来上代码
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title></title>
    </head>
    <body>
        <div id="aa"></div>
        <div>
            <input type="text" oninput="changedata(this.value)">
        </div>
        <script>
            var data = {};
            var dom_aa = document.getElementById("aa")
            function changedata(value){
                data.a = value
            }
            //直接使用Object.defineProperty里面的set方法进行视图改变
            Object.defineProperty(data,"a",{
                set:function(newValue){
                    dom_aa.innerHTML = newValue;
                },
                get:function(){
                    return a;
                }
            })
        </script>
    </body>
</html>这段代码拷贝直接运行
vue双向绑定原理(简单实现原理附demo)的更多相关文章
- vue双向绑定的简单实现(原创)
		简单模拟一下vue的双向绑定实现,代码比较粗糙,菜鸟一枚,欢迎各位大佬斧正 1.实验环境: 利用a.b两个input,a代表页面中的数据,b代表data中的数据 2.原理: 利用Object.defi ... 
- vue实现双向绑定的简单原理: defineProperty
		<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- 最近老是有兄弟问我,Vue双向绑定的原理,以及简单的原生js写出来实现,我就来一个最简单的双向绑定,原生十行代码让你看懂原理
		废话不多说直接看效果图 代码很好理解,但是在看代码之前需要知道Vue双向绑定的原理其实就是基于Object.defineProperty 实现的双向绑定 官方传送门 这里我们用官方的话来说Object ... 
- vue双向绑定的原理及实现双向绑定MVVM源码分析
		vue双向绑定的原理及实现双向绑定MVVM源码分析 双向数据绑定的原理是:可以将对象的属性绑定到UI,具体的说,我们有一个对象,该对象有一个name属性,当我们给这个对象name属性赋新值的时候,新值 ... 
- Vue双向绑定原理,教你一步一步实现双向绑定
		当今前端天下以 Angular.React.vue 三足鼎立的局面,你不选择一个阵营基本上无法立足于前端,甚至是两个或者三个阵营都要选择,大势所趋. 所以我们要时刻保持好奇心,拥抱变化,只有在不断的变 ... 
- vue双向绑定原理分析
		当我们学习angular或者vue的时候,其双向绑定为我们开发带来了诸多便捷,今天我们就来分析一下vue双向绑定的原理. 简易vue源码地址:https://github.com/jiangzhenf ... 
- Vue双向绑定的实现原理系列(一):Object.defineproperty
		了解Object.defineProperty() github源码 Object.defineProperty()方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. ... 
- [Vue源码]一起来学Vue双向绑定原理-数据劫持和发布订阅
		有一段时间没有更新技术博文了,因为这段时间埋下头来看Vue源码了.本文我们一起通过学习双向绑定原理来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫 ... 
- Vue双向绑定的实现原理系列(三):监听器Observer和订阅者Watcher
		监听器Observer和订阅者Watcher 实现简单版Vue的过程,主要实现{{}}.v-model和事件指令的功能 主要分为三个部分 github源码 1.数据监听器Observer,能够对数据对 ... 
- 梳理vue双向绑定的实现原理
		Vue 采用数据劫持结合发布者-订阅者模式的方式来实现数据的响应式,通过Object.defineProperty来劫持数据的setter,getter,在数据变动时发布消息给订阅者,订阅者收到消息后 ... 
随机推荐
- 【Linux-驱动】驱动策略----信号量
			访问共享资源的代码区块叫“临界区”,临界区需要以某种互斥机制加以保护:自旋锁.信号量等.互斥访问:一个执行单元在访问共享资源的时候,其他的执行单元被禁止访问. 信号量:在Liunx中的信号量是一种睡眠 ... 
- MySQL-快速入门(10)触发器
			1.什么是触发器 触发器是与表有关的命名数据库对象.触发器由事件来触发某个操作. 触发器是特殊的存储过程,触发器不需要call语句来调用,也不需要手工启动,只需要确定一个预定义的事件发生的时候,就会被 ... 
- echart 柱状图 两个纵轴坐标 刻度不一样
			在使用echart的过程中, 有的时候柱状图会使用两个纵坐标, 如果两个纵坐标的最大值是一样的还好,这样刻度也会一样. 但是多数情况下最大值是不一样的, 这样就造成了,刻度线很乱,显示不均匀. 解决办 ... 
- JS案例经验1
			一 可以通过设置在一个div中的多个div的定位属性为absolute,从而使得这几个元素重叠.他们都脱离了标准流. 二 对于absolute的left和right属性,当left和right同时出现 ... 
- java基础笔记(11)
			css 样式的设置主要有选择器+声明{}:声明里又分为属性和值: 注释代码:/*注释语句*/ 内联式:写在元素开始的标签里:例:<p style = "color:red;font-s ... 
- python中session的使用
- 使用Eclipse-Maven-git做Java开发(3)--Eclipse的安装和配
			使用Eclipse-Maven-git做Java开发(3)--Eclipse的安装和配 https://my.oschina.net/songxinqiang/blog/474530 
- 已知链表头结点指针head,写一个函数把这个链表逆序
			Node* ReverseList ( Node *head ) { if ( head == NULL || head->next == NULL ) return head; Node *p ... 
- quartus ip核破解
			在证书文件中添加一段: FEATURE 6AF7_0012 alterad 2035.12 permanent uncounted E75BE809707E VENDOR_STRING="i ... 
- 一、IIS搭建前端静态模板_资源加载问题
			一.模板文件说明和效果展示 二.IIS配置模板 三.解决方案 把资源文件复制到html目录内与index.htm同级,因为我iis指定站点就是该目录. 
