手写vue(数组数据拦截)

一:source/vue/onserve/array.js

import {definReactive} from './Observer'
//把原生方法重构
//在原生方法外面包一层,在调用时添加判断,若是对象就监控,
let oldArryMethods = Array.prototype;
//拷贝数组原有方法
export let arryMethods = Object.create(oldArryMethods)

//需要拦截的原生方法
let methods = [
    "push","shift","pop","unshift","reverse","concat","sort",'splice',"split"
]
methods.forEach(m =>{
    //执行的方法
    arryMethods[m] = function(...args){
        console.log('拦截数组原生方法');
        // 调用原生方法
        let res =  oldArryMethods[m].apply(this,args);
        let inserted;


        switch(m){
            case 'push':
                    case 'unshift':
                            inserted = args;break;
                            case 'splice':
                                inserted = args.slice(2);//取新增的内容
                                default:
                                    break;
        }
        if(inserted){
            definReactive(this,this.length -1,inserted[0])
            console.log("数据拦截"+inserted,this);
            
        }
        return res;
    }
})

二.source/vue/Observe.js

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值