• MVVM之数据劫持Observer


    Observer

    MVVM的理论,就不去赘述了。

    以Vue中的Observer 数据劫持来说 其主要使用ES5中的Object.defineProperty(vue3.x中表示弃用Object.defineProperty使用更快的原生proxy) 去给对象的属性添加get和set,废话不多说上代码。

    class Observer {
        constructor(data) {
            this.observer(data);
        }
        observer(data) {
            // data 原有属性改成get set
            if (!data || typeof data !== 'object') {
                return;
            }
            // 要将数据 一一劫持 先获取到data的key和value
            Object.keys(data).forEach(key => {
                this.defineReactive(data, key, data[key]);
                this.observer(data[key]); // 深度递归劫持    
            })
        }
        // 定义响应式
        defineReactive(obj, key, value) {
            let that = this;
            Object.defineProperty(obj, key, {
                enumerable: true,   // 可枚举
                configurable: true,
                get() {
                    return value;
                },
                set(newValue) {
                    if (newValue != value) {
                        // this 不是实例
                        that.observer(newValue); // 如果是对象继续劫持
                        value = newValue;
                    }
                }
            })
        }
    }
  • 相关阅读:
    linux目录跳转的好武器z.sh
    找工作的程序员必懂的Linux
    11-面向对象4
    10-面向对象3
    09-面向对象2
    08-面向对象1
    06-数组
    3.5-乘法运算器设计
    3.2-定点数补码加减运算器设计
    4.12-虚拟存储器
  • 原文地址:https://www.cnblogs.com/aisiqi-love/p/12835779.html
Copyright © 2020-2023  润新知