1.1 Vue构造器的默认选项
var ASSET_TYPES = [
'component',
'directive',
'filter'
];
Vue.options = Object.create(null); // 原型上创建了一个指向为空对象的options属性
ASSET_TYPES.forEach(function (type) {
Vue.options[type + 's'] = Object.create(null);
});
Vue.options._base = Vue;
Vue
构造函数自身有四个默认配置选项,分别是component,directive, filter
以及返回自身构造器的_base
(这里先不展开对每个属性内容的介绍)。这四个属性挂载在构造函数的options
属性上。
我们抓取_init
方法合并选项的核心部分代码如下:
function initMixin (Vue) {
Vue.prototype._init = function (options) {
var vm = this;
// a uid
// 记录实例化多少个vue对象
vm._uid = uid$3++;
// 选项合并,将合并后的选项赋值给实例的$options属性
vm.$options = mergeOptions(
resolveConstructorOptions(vm.constructor), // 返回Vue构造函数自身的配置项
options || {},
vm
);
};
}
从代码中可以看到,选项合并的重点是将用户自身传递的options
选项和Vue
构造函数自身的选项配置合并,并将合并结果挂载到实例对象的$options
属性上。