当前位置:首页 > VUE

vue2简易实现

2026-02-22 12:38:23VUE

vue2 简易实现方法

Vue2 的简易实现可以通过手动构建核心功能来完成。以下是关键步骤:

数据响应式

使用 Object.defineProperty 实现数据劫持:

function defineReactive(obj, key, val) {
  Object.defineProperty(obj, key, {
    get() {
      return val
    },
    set(newVal) {
      if (newVal === val) return
      val = newVal
      // 触发更新
    }
  })
}

依赖收集

创建 Dep 类管理依赖:

class Dep {
  constructor() {
    this.subs = []
  }
  addSub(sub) {
    this.subs.push(sub)
  }
  notify() {
    this.subs.forEach(sub => sub.update())
  }
}

观察者模式

实现 Watcher 类:

class Watcher {
  constructor(vm, key, cb) {
    this.vm = vm
    this.key = key
    this.cb = cb
    Dep.target = this
    this.vm[this.key] // 触发getter
    Dep.target = null
  }
  update() {
    this.cb.call(this.vm, this.vm[this.key])
  }
}

模板编译

简单模板解析示例:

function compile(el, vm) {
  vm.$el = document.querySelector(el)
  const fragment = document.createDocumentFragment()
  let child
  while (child = vm.$el.firstChild) {
    fragment.appendChild(child)
  }
  function replace(frag) {
    Array.from(frag.childNodes).forEach(node => {
      const txt = node.textContent
      const reg = /\{\{(.*?)\}\}/g
      if (node.nodeType === 3 && reg.test(txt)) {
        const key = RegExp.$1.trim()
        new Watcher(vm, key, function(val) {
          node.textContent = txt.replace(reg, val)
        })
        node.textContent = txt.replace(reg, vm[key])
      }
    })
  }
  replace(fragment)
  vm.$el.appendChild(fragment)
}

完整示例

组合以上功能:

vue2简易实现

class Vue {
  constructor(options) {
    this.$options = options
    this.$data = options.data
    this.observe(this.$data)
    compile(options.el, this)
  }
  observe(data) {
    Object.keys(data).forEach(key => {
      defineReactive(this, key, data[key])
    })
  }
}

注意事项

  • 此实现省略了数组处理、虚拟DOM等复杂功能
  • 实际项目中应使用官方Vue2库
  • 仅用于理解Vue2核心原理

以上代码展示了Vue2最基础的响应式原理实现,包含数据劫持、依赖收集和模板编译等核心功能。

标签: 简易
分享给朋友:

相关文章

使用vue实现简易网页

使用vue实现简易网页

使用 Vue 实现简易网页 创建 Vue 项目 使用 Vue CLI 快速初始化项目,确保已安装 Node.js 和 npm。 运行以下命令创建项目: npm install -g @vue/c…

uniapp 简易框架

uniapp 简易框架

uniapp 简易框架搭建方法 环境准备 安装 HBuilderX 作为开发工具,确保已配置 Node.js 环境。通过 HBuilderX 创建 uni-app 项目时选择默认模板或自定义模板。…

实现简易vue

实现简易vue

实现简易 Vue 的核心思路 简易 Vue 的实现主要围绕数据响应式、模板编译和依赖收集展开。以下是一个简化版 Vue 的实现框架: 数据响应式系统 通过 Object.defineProperty…

vue实现简易任务看板

vue实现简易任务看板

实现思路 Vue实现简易任务看板的核心在于组件化设计、状态管理和用户交互。通过列表展示任务,支持增删改查操作,利用Vue的响应式特性实现数据动态更新。 项目结构 src/ ├── compone…

使用vue实现简易网页

使用vue实现简易网页

使用 Vue 实现简易网页 初始化 Vue 项目 安装 Vue CLI 工具(需提前安装 Node.js): npm install -g @vue/cli 创建新项目并选择默认配置: v…