> 数组方法编译源码分析(core/observer/array.js)
import { def } from '../util/index';
arrayMethods = Object.create(Array.prototype);
let methods = ['push','pop','shift','unshift','splice','sort','reverse'];
methods.forEach(function (method) {
const original = Array.prototype[method];
def(arrayMethods, method, function () {
const ob = this.__ob__ //--数据监控对象,该方法由new Observer(value)实例化时调用,在执行该函数时this.__ob__已经存在
let inserted //--定义插入的数据
let args = Array.from(arguments)
const result = original.apply(this, args) //---调用原生的函数
switch (method) {
case 'push':
inserted = args
break
case 'unshift':
inserted = args
break
case 'splice':
inserted = args.slice(2)
break
}
inserted && ob.observeArray(inserted) //--新插入的数据,实现监控
ob.dep.notify() //--发布通知
return result
})
})