text: /*
   * not type checking this file because flow doesn't play well with
   * dynamically accessing methods on Array prototype
   */
  
  import { def } from '../util/index'
  
  const arrayProto = Array.prototype
  export const arrayMethods = Object.create(arrayProto)
  
  const methodsToPatch = [
    'push',
    'pop',
    'shift',
    'unshift',
    'splice',
    'sort',
    'reverse'
  ]
  
  /**
   * Intercept mutating methods and emit events
   * 拦截造成变动的数组方法然后触发事件
   */
  methodsToPatch.forEach(function (method) {
    // cache original method
    const original = arrayProto[method]
    def(arrayMethods, method, function mutator(...args) {
      const result = original.apply(this, args)
      const ob = this.__ob__
      let inserted
      switch (method) {
        case 'push':
        case 'unshift':
          inserted = args
          break
        case 'splice':
          inserted = args.slice(2)
          break
      }
      if (inserted) ob.observeArray(inserted)   //观察新插入的数组项
      // notify change
      ob.dep.notify()
      return result
    })
  })
  