vue 数组劫持

148 阅读1分钟

核心理念:拦截改变原数组的方法push、unshift、shift、pop、splice、sort、reverse

let oldArrayPrototypeMethods = Array.prototype
let newArrayMethods = Object.create(oldArrayPrototypeMethods)

let methods = ['pop','unshift','pop','push','splice','sort','reverse']

methods.forEach(method => {
	newArrayMethods[method] = function(...args){
    	let result = oldArrayPrototypeMethods[method].apply(this, args)
        let insert;
        switch(method){
        	case 'push':
            
            case 'unshift':
            insert = args;
            
            case 'splice':
            insert = args.slice(2)
            
            default:
            	break;
            if(insert){
            	observeArray(insert)
            }
        }
    	return result
    }

})