vue的vm怎么实现
Vue 中的 vm 实现
Vue 中的 vm 指的是 Vue 实例(ViewModel),它是 Vue 的核心,负责连接视图(View)和数据模型(Model)。Vue 实例通过数据绑定和响应式系统实现视图与模型的同步。
创建 Vue 实例
通过 new Vue() 创建一个 Vue 实例,传入一个配置对象,包含数据、方法、生命周期钩子等。
const vm = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
},
methods: {
greet() {
alert(this.message);
}
}
});
数据响应式
Vue 使用 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现数据的响应式。当数据变化时,视图会自动更新。
// Vue 2 响应式原理简化示例
function defineReactive(obj, key, val) {
Object.defineProperty(obj, key, {
get() {
return val;
},
set(newVal) {
val = newVal;
console.log(`属性 ${key} 更新为 ${newVal}`);
}
});
}
模板编译
Vue 将模板编译为渲染函数,生成虚拟 DOM(VNode),最终渲染为真实 DOM。通过 el 或 $mount 挂载到 DOM 节点。
vm.$mount('#app');
生命周期钩子
Vue 实例在创建、挂载、更新和销毁过程中会触发生命周期钩子,可以在这些钩子中执行自定义逻辑。
new Vue({
created() {
console.log('实例已创建');
},
mounted() {
console.log('实例已挂载');
}
});
指令与事件绑定
Vue 提供指令(如 v-model、v-for)和事件绑定(如 @click)实现视图与数据的交互。
<div id="app">
<input v-model="message">
<button @click="greet">Greet</button>
</div>
计算属性与侦听器
计算属性(computed)和侦听器(watch)用于处理复杂逻辑或响应数据变化。
new Vue({
data: {
firstName: 'John',
lastName: 'Doe'
},
computed: {
fullName() {
return `${this.firstName} ${this.lastName}`;
}
},
watch: {
firstName(newVal) {
console.log(`firstName 变为 ${newVal}`);
}
}
});
通过以上方式,Vue 的 vm 实现了数据与视图的双向绑定,简化了前端开发。







