关于vue的访问属性代理

vue 有一个特点,可以通过访问 vm 的实例属性,直接访问到 vm 初始化时 data 的属性值。

const vm = new Vue({
    data() {
        return {
            a: 123
        };
    }
});

console.log(vm.a); // 123

这个其实是一个代理模式的实现, 对 vm 实例进行键值的代理

实现方式:

let a = {
    data: {
        b: 123
    }
};

/**
 * 实现访问 a.b === 123
 */
function proxy(target: Object, sourceKey: string): void {
    let data = target[sourceKey];
    let keys = Object.keys(data);
    for (let i = 0, l = keys.length; i < l; i++) {
        let key = keys[i];
        Object.defineProperty(target, key, {
            enumerable: true,
            configurable: true,
            set(val) {
                this[sourceKey][key] = val;
            },
            get() {
                return this[sourceKey][key];
            }
        });
    }
}

proxy(a, "data");

console.log(a.b); // 123

浏览器执行结果

image
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容