手写Vue之MyVue

这里要实现的功能是,把new Vue({data:{}})里面的data数据进行挂载,直接挂载到this上面,然后通过代理的方式,间接获取和设置到this里面。

如下图:_MyData是从传入的参数里面取出的,然后通过给this定义a和v两个属性,间接去操控_MyData里面的数据。

 

function MyVue(option){
    this.$option = option;// 先把参数保存起来
    let data = this._MyData = option.data;// 单独提取出参数里面的data属性
    this.BindData(data);// 把data绑定到vm上面
    // 编译之前,给data的每个属性加上Dep
    new Observer(this._MyData);
    $compile = new MyCompile(option.el,this);
    // option.el && this.GetElementByEl(option.el)// 获取到el中对应的所有标签
}

MyVue.prototype = {

    BindData(data){
        let me = this;// 这里的this指的是new的时候创建的空对象 {}
        // 遍历data,
        Object.keys(data).forEach(function (key) {
            me._ProxyData(key);
        })
    },
    _ProxyData:function (key) {
        let me = this;// 这里的this依然是new时候的空对象
        Object.defineProperty(me,key,{
            configurable:false,
            enumerable:true,
            set:function (value) {
                this._MyData[key]=value;
            },
            get:function () {
                return this._MyData[key];
            }
        })
    },

}

代码:

function MyVue(option){
    this.$option = option;// 先把参数保存起来
    let data = this._MyData = option.data;// 单独提取出参数里面的data属性
    this.BindData(data);// 把data绑定到vm上面
    // 编译之前,给data的每个属性加上Dep
    new Observer(this._MyData);
    $compile = new MyCompile(option.el,this);
    // option.el && this.GetElementByEl(option.el)// 获取到el中对应的所有标签
}

MyVue.prototype = {

    BindData(data){
        let me = this;// 这里的this指的是new的时候创建的空对象 {}
        // 遍历data,
        Object.keys(data).forEach(function (key) {
            me._ProxyData(key);
        })
    },
    _ProxyData:function (key) {
        let me = this;// 这里的this依然是new时候的空对象
        Object.defineProperty(me,key,{
            configurable:false,
            enumerable:true,
            set:function (value) {
                this._MyData[key]=value;
            },
            get:function () {
                return this._MyData[key];
            }
        })
    },

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值