当前位置:首页 > VUE

vue的vm怎么实现

2026-02-23 18:51:25VUE

Vue 实例(vm)的实现原理

Vue 实例(ViewModel,简称 vm)是 Vue 应用的核心,负责连接数据与视图。其实现基于以下关键机制:

数据响应式系统

通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)劫持数据对象的属性访问。当数据变化时,触发依赖的视图更新。

// Vue 2 响应式简化实现
function defineReactive(obj, key, val) {
  const dep = new Dep(); // 依赖收集器
  Object.defineProperty(obj, key, {
    get() {
      dep.depend(); // 收集当前依赖
      return val;
    },
    set(newVal) {
      val = newVal;
      dep.notify(); // 通知更新
    }
  });
}

虚拟 DOM 与渲染

Vue 将模板编译为渲染函数,生成虚拟 DOM。当数据变化时,通过 diff 算法比对新旧虚拟 DOM,高效更新真实 DOM。

// 虚拟 DOM 简化示例
function createVNode(tag, props, children) {
  return { tag, props, children };
}

生命周期管理

实例化过程中触发生命周期钩子(如 createdmounted),允许开发者在特定阶段插入逻辑。

// 生命周期调用示例
function callHook(vm, hook) {
  const handlers = vm.$options[hook];
  handlers && handlers.call(vm);
}

创建 Vue 实例的典型方式

通过 new Vue(options) 创建实例,选项对象包含数据、方法、生命周期钩子等配置。

const vm = new Vue({
  data: { message: 'Hello Vue' },
  methods: {
    showMessage() {
      alert(this.message);
    }
  },
  mounted() {
    console.log('实例已挂载');
  }
});

实例方法与属性

Vue 实例暴露常用 API,如 $watch$set 等,并提供对 DOM 元素($el)、父实例($parent)等属性的访问。

vm.$watch('message', (newVal) => {
  console.log('message 变化:', newVal);
});

组件实例扩展

每个 Vue 组件也是一个独立的 vm 实例,通过组件系统实现复用和嵌套,继承 Vue 的核心能力。

vue的vm怎么实现

标签: vuevm
分享给朋友:

相关文章

vue 实现复选

vue 实现复选

Vue 实现复选功能 在 Vue 中实现复选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集用户选择的复选框值。…

vue实现muli

vue实现muli

Vue 实现多语言(i18n)支持 在 Vue 项目中实现多语言(i18n)功能,通常使用 vue-i18n 插件。以下是具体实现步骤: 安装 vue-i18n npm install vue-i…

vue实现闪烁

vue实现闪烁

Vue实现元素闪烁效果 使用CSS动画实现 通过Vue绑定class结合CSS动画实现闪烁效果,代码简洁且性能较好。 <template> <div :class="{ 'b…

vue实现过滤

vue实现过滤

Vue实现过滤的方法 在Vue中实现数据过滤可以通过多种方式完成,以下是几种常见的方法: 使用计算属性过滤 计算属性是Vue中处理数据过滤的理想选择,它们基于响应式依赖进行缓存,只有在相关依赖发生…

vue实现图册

vue实现图册

Vue实现图册功能 在Vue中实现图册功能通常涉及图片展示、切换、缩放等交互效果。以下是常见的实现方法和关键代码示例: 基础图册组件结构 使用Vue单文件组件构建基础结构: <templ…

vue实现hover

vue实现hover

Vue 实现 hover 效果的方法 在 Vue 中实现 hover 效果可以通过多种方式实现,包括使用 CSS、Vue 指令或事件监听。以下是几种常见的方法: 使用 CSS :hover 伪类 通…