• vue入门学习篇——数据双向绑定原理及简单实现


    vue数据双向绑定原理

      vue双向绑定的原理是通过Object.defineProperty()劫持数据结合发布者-订阅者模式的方式来实现的。

    Object.defineProperty()

      Object.defineProperty()方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。

     语法:Object.defineProperty(obj,prop,descriptor);
    
        obj: 要在其上定义属性的对象。
    
        prop: 要定义或修改的属性的名称。
    
        descriptor: 将被定义或修改的属性描述符。

      这里用到了Object.defineProperty()的get和set方法。

      get:当访问该属性时,该方法会被执行,方法执行时没有参数传入,但是会传入this对象(由于继承关系,这里的this并不一定是定义该属性的对象)。

      set:当属性值修改时,触发执行该方法。该方法将接受唯一参数,即该属性新的参数值。

    具体用法请浏览此处

     简单实现

    <input type="text" id="model" />
    <div id="modelText"></div>
        let modelInfo = {};
        let defaultValue = 'Hello Object.defineProperty';
        let model = document.getElementById('model');
        let text = document.getElementById('modelText');
        model.value = defaultValue;
        text.innerText = defaultValue;
        /**
         * writable属性的值是否可以被重写。设置为true可以被重写;设置为false,不能被重写。默认为false。
         * value属性对应的值,可以使任意类型的值,默认为undefined
         * configuable是否可以删除目标属性或是否可以再次修改属性的特性(writable, configurable, enumerable)。设置为true可以被删除或可以重新设置特性;设置为false,不能被可以被删除或不可以重新设置特性。默认为false。
         * enumerable此属性是否可以被枚举(使用for...in或Object.keys())。设置为true可以被枚举;设置为false,不能被枚举。默认为false。
         */
        Object.defineProperty(modelInfo,'key',{
            get(){
                return defaultValue;
            },
            set(value){
                defaultValue = value;
                model.value = value;
                text.innerText = value;
            }
        });
        model.addEventListener('input',function(){
            modelInfo.key = this.value;
        });

    如果想要深入了解,建议看vue的双向绑定原理及实现

  • 相关阅读:
    实验一 GIT 代码版本管理
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS博客作业01-线性表
    C博客作业05--2019-指针
    C语言博客作业04--数组
    C语言博客作业03--函数
    python exp4 jieba+wordcloud
  • 原文地址:https://www.cnblogs.com/hess/p/10874972.html
Copyright © 2020-2023  润新知