zoukankan      html  css  js  c++  java
  • 实现Vue-MVVM-step1

    一个利用defineProperty实现的MVVM双向数据绑

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Vue-MVVM</title>
        </head>
        <body>
            <input type="text" id="input1" value="" oninput="myFun()" />
            <input type="text" id="input2" />
        </body>
        <script>
            function myFun() {
                o._data.test = document.getElementById('input1').value
            }
            /* 这个函数用来模拟视图更新 */
            function cb(val) {
                console.log('试图更新啦~~');
                document.getElementById('input2').value = val
            }
            /* 遍历所有属性的方式对该对象的每一个属性都通过 defineReactive  */
            function observer(value) {
                if (!value || (typeof value !== 'object')) {
                    return;
                }
                Object.keys(value).forEach((key) => {
                    defineReactive(value, key, value[key]);
                })
            }
            /* 实现对对象的「响应式」 */
            function defineReactive(obj, key, val) {
                Object.defineProperty(obj, key, {
                    enumerable: true,        // 能否被遍历,比如 for in,默认值为 false
                    configurable: true,        // 描述该属性的描述符能否被改变,默认值为 false
                    get: function reactiveGetter() {        // 取值的时候调用,默认值为 false
                        return val;
                    },
                    set: function reactiveSetter(newVal) {        // 设置值的时候使用
                        if (newVal === val) return;
                        cb(newVal);
                    }
                });
            }
            /* 声明类 */
            class Vue {
                constructor(options) {
                    this._data = options.data;
                    observer(this._data)
                }
            }
            /* 创建实例 */
            var o = new Vue({
                data: {
                    test: ""
                }
            })
        </script>
    </html>
  • 相关阅读:
    C#学习笔记_01_基础内容
    C#学习笔记_03_运算符
    C#学习笔记_02_数据类型
    统计学习方法(一)
    《史蒂夫·乔布斯传》读书笔记
    《孵化twitter》读书笔记
    保存和恢复 Android Fragment 的状态
    计算机视觉中的边缘检测
    Android开发的过去、现在和将来
    Python常用的第三方库
  • 原文地址:https://www.cnblogs.com/RuMengkai/p/9402500.html
Copyright © 2011-2022 走看看