美文网首页
关于vue的访问属性代理

关于vue的访问属性代理

作者: 打杂coder | 来源:发表于2018-08-15 16:15 被阅读266次

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

相关文章

  • 关于vue的访问属性代理

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

  • vue 中script 标签 有哪些属性 (vue实例有哪些属性

    <1>数据访问 (1) $data: vue实例观察的数据对象,Vue实例代理了对其data对象属性的访问 (2)...

  • vue中父子组件通信

    通信方式: 一、props 当前组件接收到的 props 对象。Vue 实例代理了对其 props 对象属性的访问...

  • KVC(3) 访问集合属性

    访问集合属性 普通方式访问 可变代理方式 当你修改代理对象的时候,添加,删除,替换里面的内容,对应的集合属性的内容...

  • Vue.js 1.0 Official Guide Note

    Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...

  • vue学习笔记

    Vue学习笔记 Vue初始化对象 data和methods里面的属性都是Vue这个实例对象的代理属性,例:vm.m...

  • Werkzeug的Local系列(2) - 属性的代理访问

    属性的代理访问 实现某个实例的属性访问代理到内部另一个实例中去,目的可能是作为继承的一个替代方法或者实现代理模式。...

  • vue双向数据绑定

    Vue双向数据绑定原理 1.属性访问器 ECMAScript中的属性分为两种:数据属性和访问器属性 1 数据属性数...

  • Vue中的data属性

    Vue 中的data Vue实例会代理data对象的属性, vm.$data.a相等于vm.a 以-和$开头的属性...

  • Vue实例

    属性与方法: 每个 Vue 实例都会代理其data对象里所有的属性: 注意只有这些被代理的属性是响应的,也就是说值...

网友评论

      本文标题:关于vue的访问属性代理

      本文链接:https://www.haomeiwen.com/subject/yyuwbftx.html