1、Vue本质上是一个构造函数,只能通过new调用
function Vue (options) { // 保证了无法直接通过Vue()去调用,只能通过new的方式去创建实例 if (!(this instanceof Vue)) { warn('Vue is a constructor and should be called with the `new` keyword'); } this._init(options); } return Vue;
2、Vue有5个原型属性和方法
init方法(内部方法):initMixin(Vue)
数据相关:stateMixin(Vue)
事件相关:eventsMixin(Vue)
生命周期相关:lifecycleMixin(Vue)
渲染相关:renderMixin(Vue)
3、Vue的静态属性和方法
配置方法:Vue.config()
内部工具方法:Vue.util()
Vue.set()
Vue.delet()
Vue.nextTick()
Vue.use()
Vue.mixin()
扩展子类构造器:Vue.extend()
默认选项:Vue.components,Vue.directive,Vue.filter
4、Vue构造器的默认选项
Vue默认选项会保留在静态的options属性上,有4个默认选项:
components:组件,如keepAlive,transition,transitionGroup的内置组件
directive:指令,如v-model、v-show等
filter:过滤器,没有默认值
_base:返回自身构造器,即Vue.options._base = Vue;
5、实例化Vue做的核心操作便是执行原型上的_init方法进行初始化
初始化包括:选项合并配置,初始化生命周期,初始化事件,初始化数据等。
其中第一步也是很关键的一步就是对选项的合并。
选项合并的本质就是用户自身传递的options选项和Vue构造函数自身的选项配置合并。
6、选项合并过程中需要做规范验证
components规范检验
注册组件时的检验,例如:组件名不能用html保留的标签(如:img,p),也不能包含非法的字符等。
props规范检验
数组形式 { props: ['a', 'b', 'c'] },
对象形式 { props: { a: { type: 'String', default: 'prop校验' } }}
两种形式最终都会转换成对象的形式
inject规范检验
依赖注入检验,provide/inject他们是一对组合,作用是后代都能访问到父代注入的数据/方法
directive规范检验
使用指令时的检验,vue提供了五个钩子函数bind, inserted, update, componentUpdated, unbind
7、子类构造器
Vue提供了一个Vue.extend的静态方法,它是基于基础的Vue构造器创建一个“子类”,而这个子类所传递的选项配置会和父类的选项配置进行合并。