vue mvvm的实现
Vue MVVM 的实现原理
Vue 的 MVVM(Model-View-ViewModel)实现主要依赖于数据绑定和响应式系统。以下是其核心实现机制:
响应式数据绑定
Vue 使用 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现数据劫持。当数据发生变化时,视图会自动更新。
// Vue 2 的响应式实现示例
function defineReactive(obj, key, val) {
Object.defineProperty(obj, key, {
get() {
return val;
},
set(newVal) {
if (newVal === val) return;
val = newVal;
// 触发视图更新
}
});
}
虚拟 DOM 和 Diff 算法
Vue 通过虚拟 DOM 优化渲染性能。当数据变化时,生成新的虚拟 DOM,通过 Diff 算法比较新旧虚拟 DOM,计算出最小更新操作。

// 简化的虚拟 DOM 结构
{
tag: 'div',
props: { id: 'app' },
children: [
{ tag: 'span', children: 'Hello' }
]
}
模板编译
Vue 将模板编译为渲染函数。模板中的指令和插值会被转换为 JavaScript 代码。
<!-- 模板 -->
<div id="app">{{ message }}</div>
<!-- 编译后的渲染函数 -->
function render() {
with(this) {
return _c('div', { attrs: { "id": "app" } }, [_v(_s(message))])
}
}
依赖收集和派发更新
Vue 通过 Watcher 和 Dep 实现依赖收集。每个响应式属性都有一个 Dep 实例,用于存储依赖的 Watcher。当数据变化时,通知所有依赖的 Watcher 更新。

class Dep {
constructor() {
this.subs = [];
}
addSub(sub) {
this.subs.push(sub);
}
notify() {
this.subs.forEach(sub => sub.update());
}
}
组件系统
Vue 的组件是 MVVM 中的 ViewModel。每个组件实例都有自己的作用域,通过 props 和 events 与父组件通信。
Vue.component('my-component', {
props: ['message'],
template: '<div>{{ message }}</div>'
});
生命周期管理
Vue 提供生命周期钩子,允许开发者在特定阶段执行代码。这些钩子包括 created、mounted、updated 等。
new Vue({
data: { count: 0 },
created() {
console.log('实例创建完成');
}
});
Vue 的 MVVM 实现通过这些机制实现了数据与视图的自动同步,开发者只需关注数据状态,无需手动操作 DOM。






