当前位置:首页 > VUE

vue数组实现原理

2026-02-25 17:50:06VUE

Vue 数组响应式实现原理

Vue 通过重写数组的原型方法来实现对数组变化的监听。具体实现方式是通过拦截数组的变异方法(如 pushpopshiftunshiftsplicesortreverse),并在这些方法被调用时触发视图更新。

vue数组实现原理

核心实现步骤

拦截数组原型方法 Vue 创建了一个继承自 Array.prototype 的新对象 arrayMethods,并重写了其中的变异方法。当调用这些方法时,Vue 会先执行原始方法,再通知依赖更新。

vue数组实现原理

const arrayProto = Array.prototype
const arrayMethods = Object.create(arrayProto)

const methodsToPatch = [
  'push',
  'pop',
  'shift',
  'unshift',
  'splice',
  'sort',
  'reverse'
]

methodsToPatch.forEach(function (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)
    ob.dep.notify()
    return result
  })
})

代理数组原型 Vue 在初始化数据时,会检查数据是否为数组。如果是数组,则将数组的原型指向 arrayMethods,从而实现对数组方法的拦截。

if (Array.isArray(value)) {
  const augment = hasProto
    ? protoAugment
    : copyAugment
  augment(value, arrayMethods, arrayKeys)
  this.observeArray(value)
}

处理新增元素 对于 pushunshiftsplice 这些可能新增元素的方法,Vue 会对新增的元素进行响应式处理,确保新元素也是响应式的。

注意事项

  • Vue 无法检测通过索引直接设置数组项的变化(如 arr[0] = newValue),应使用 Vue.setarr.splice 替代。
  • Vue 也无法检测直接修改数组长度的变化(如 arr.length = 0),应使用 arr.splice(0) 替代。

性能优化

Vue 通过重写数组方法而非使用 Object.defineProperty 监听数组每一项,主要是出于性能考虑。数组可能包含大量元素,逐项监听会带来较大性能开销。

标签: 数组原理
分享给朋友:

相关文章

vue的实现原理

vue的实现原理

Vue 的实现原理 Vue 是一个渐进式 JavaScript 框架,其核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是 Vue 实现原理的关键部分: 响应式系统 Vue…

vue原理实现

vue原理实现

Vue 的核心原理实现 Vue 的核心原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是这些核心原理的具体实现方式: 响应式系统 Vue 的响应式系统基于 Object.define…

js放大镜的实现原理

js放大镜的实现原理

放大镜效果的基本原理 放大镜效果的核心是通过鼠标移动事件获取当前光标位置,动态计算放大区域的显示范围和比例。通常需要两个元素:原图容器和放大镜显示的容器。当鼠标在原图上移动时,放大镜容器显示对应位置的…

vue如何实现原理

vue如何实现原理

Vue 实现原理的核心机制 Vue.js 的核心实现原理基于响应式系统、虚拟 DOM 和组件化设计。以下是关键机制的详细解析: 响应式系统 Vue 通过 Object.defineProperty…

vue插件实现原理

vue插件实现原理

Vue 插件实现原理 Vue 插件的核心是通过暴露一个 install 方法,在 Vue 应用初始化时被调用,从而扩展 Vue 的功能。插件可以添加全局方法、指令、混入、组件等。 插件基本结构 一…

vue watch 实现 原理

vue watch 实现 原理

Vue Watch 实现原理 Vue 的 watch 功能用于监听数据变化并执行回调函数。其核心原理基于 Vue 的响应式系统,依赖 Object.defineProperty 或 Proxy(Vue…