zoukankan      html  css  js  c++  java
  • 实现一个Vue的数据双向绑定原理

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

    (setter和getter是对象的存储器属性,是一个函数,用来获取和设置值)

    <!DOCTYPE html>
    <html lang="zh-CN">
    
    <head>
        <meta charset="UTF-8">
        <title>实现Vue数据双向绑定</title>
        <!-- <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"> -->
    </head>
    
    <body>
        <div id="app">
            <input type="text" id="input">
            <span id="span"></span>
        </div>
        <script>
            var input=document.getElementById('input');
            var span=document.getElementById('span');
    
            var obj={
                
            };
        
            //数据劫持
            Object.defineProperty(obj,'msg',{
                configurable:true, //是否可以配置、修改
                enumerable:true, //是否可枚举
                set(newValue){
                    input.value=newValue;
                    span.innerHTML=newValue;
                },
                get(){
                    return obj.msg;
                }
            });
            
            
            input.addEventListener('keyup',function(e){
                obj.msg=e.target.value;
            },false);
    
        </script>
    </body>
    
    </html>
  • 相关阅读:
    nsis打包
    学习记录:ST表
    学习记录:快速幂
    学习记录:哈夫曼树
    学习记录:二叉树
    学习记录:康托展开 与 逆康托展开
    堆排序简介
    动态规划水题集
    lower_bound( ) 与 upper_bound( )
    琐碎的一点技巧
  • 原文地址:https://www.cnblogs.com/annie211/p/12654210.html
Copyright © 2011-2022 走看看