当前位置:首页 > VUE

vue数组实现原理

2026-03-26 21:16:18VUE

Vue 数组响应式原理

Vue 通过重写数组的变异方法(如 pushpopsplice 等)来实现数组的响应式。当这些方法被调用时,Vue 能够检测到变化并触发视图更新。

重写的数组方法

Vue 重写了以下数组方法:

  • push
  • pop
  • shift
  • unshift
  • splice
  • sort
  • reverse

这些方法被调用时,Vue 会执行以下操作:

vue数组实现原理

  1. 调用原始的数组方法完成数据变更。
  2. 通知依赖(Watcher)进行更新。

实现细节

Vue 通过 Object.create(Array.prototype) 创建一个新的原型对象,并将重写的方法挂载到这个原型上。然后将数组实例的原型指向这个新创建的对象。

示例代码:

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 无法检测以下数组变动:

  1. 通过索引直接设置项:vm.items[index] = newValue
  2. 修改数组长度:vm.items.length = newLength

解决方法:

// 使用 Vue.set 或 this.$set
Vue.set(vm.items, index, newValue)

// 使用 splice
vm.items.splice(index, 1, newValue)

对象数组的响应式

对于对象数组,Vue 会对数组中的每个对象进行响应式处理。当对象属性发生变化时,也能触发视图更新。

性能考虑

Vue 没有对数组的每个索引都进行响应式处理,而是通过重写变异方法来实现。这种设计在性能和功能之间取得了平衡。

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

相关文章

vue实现数组平均值

vue实现数组平均值

计算数组平均值的方法 在Vue中计算数组的平均值可以通过多种方式实现。以下是几种常见的方法: 方法一:使用计算属性 export default { data() { return {…

vue原理与实现

vue原理与实现

Vue 的核心原理 Vue 是一个渐进式 JavaScript 框架,其核心原理包括响应式系统、虚拟 DOM、模板编译和组件化设计。这些机制共同构成了 Vue 的高效开发模式。 响应式系统通过 Ob…

vue 路由实现原理

vue 路由实现原理

Vue 路由实现原理 Vue Router 是 Vue.js 官方的路由管理器,其核心原理基于前端路由的实现方式。以下是 Vue Router 的主要实现机制: 路由模式 Vue Router 支持…

vue vif实现原理

vue vif实现原理

Vue v-if 实现原理 Vue 的 v-if 指令通过条件渲染控制 DOM 元素的显示与隐藏。其实现原理基于虚拟 DOM 和编译阶段的代码生成。 编译阶段 模板中的 v-if 会被编译为渲染函数…

vue nextick实现原理

vue nextick实现原理

Vue nextTick 实现原理 Vue 的 nextTick 是一个用于在 DOM 更新完成后执行回调的 API。其核心原理基于 JavaScript 的事件循环机制,确保回调在 DOM 更新后的…

vue watch 实现原理

vue watch 实现原理

Vue Watch 实现原理 Vue 的 watch 功能用于监听数据变化并执行回调函数。其核心原理基于 Vue 的响应式系统,通过依赖收集和触发更新机制实现。 依赖收集 在 Vue 的响应式系统中…