当前位置:首页 > 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)
}

完整示例

组合以上功能:

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最基础的响应式原理实现,包含数据劫持、依赖收集和模板编译等核心功能。

vue2简易实现

标签: 简易
分享给朋友:

相关文章

vue 原理简易实现

vue 原理简易实现

Vue 原理简易实现 Vue 的核心原理包括响应式数据绑定、虚拟 DOM 和模板编译。以下是一个简化版的实现,展示 Vue 的基本工作机制。 响应式数据绑定 通过 Object.definePro…

实现简易vue响应式

实现简易vue响应式

实现简易 Vue 响应式系统 Vue 的响应式系统核心是通过 Object.defineProperty 或 Proxy 拦截数据变化,并结合依赖收集与派发更新机制实现。以下是一个基于 Object.…

js实现简易换肤

js实现简易换肤

实现简易换肤的方法 通过JavaScript实现简易换肤功能,通常涉及动态修改CSS样式或切换CSS文件。以下是几种常见方法: 使用CSS变量切换主题 定义CSS变量并在JavaScript中修改这…

uniapp 简易框架

uniapp 简易框架

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

简易实现vue

简易实现vue

简易 Vue 实现核心思路 创建一个极简的 Vue 实现需要理解其核心机制:数据响应式、模板编译和虚拟 DOM。以下是一个简化版实现框架,仅包含核心功能。 数据响应式系统 通过 Object.de…

实现简易vue

实现简易vue

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