# new Vue做了什么
本章基于vue缩影版 (opens new window)分析执行new Vue时它都做了什么。继续停留在simple分支。
打开mysrc/core/instance/index.js,
import { initMixin } from './init'
...
function Vue (options) {
// init方法啊在initMixin被定义
this._init(options)
}
...
initMixin(Vue)
_init方法在mysrc/core/instance/init.js定义
export function initMixin (Vue) {
Vue.prototype._init = function (options) {
console.log('_init')
const vm = this
// a uid
vm._uid = uid++
// a flag to avoid this being observed
/*一个防止vm实例自身被观察的标志位*/
vm._isVue = true
// merge options
if (options && options._isComponent) {
// optimize internal component instantiation
// since dynamic options merging is pretty slow, and none of the
// internal component options needs special treatment.
initInternalComponent(vm, options)
} else {
vm.$options = mergeOptions(
resolveConstructorOptions(vm.constructor),
options || {},
vm
)
}
vm._renderProxy = vm
vm._self = vm
initRender(vm)
initState(vm)
if (vm.$options.el) {
vm.$mount(vm.$options.el)
}
}
}
_init方法主要做了合并配置、初始化渲染方法、初始化watcher工作。这些工作无非是为了后续的挂载工作做准备,挂载就是把vue组件生成的虚拟挂载到浏览器页面。