1.3 子类构造器
选项校验介绍完后,在正式进入合并策略之前,还需要先了解一个东西,子类构造器。在vue
的应用实例中,我们通过Vue.extend({ template: '<div></div>', data: function() {} })
创建一个子类,这个子类和Vue
实例创建的父类一样,可以通过创建实例并挂载到具体的一个元素上。具体用法详见Vue官方文档,而具体实现如下所示(只简单抽取部分代码):
Vue.extend = function (extendOptions) {
extendOptions = extendOptions || {};
var Super = this;
var name = extendOptions.name || Super.options.name;
if (name) {
validateComponentName(name); // 校验子类的名称是否符合规范
}
var Sub = function VueComponent (options) { // 子类构造器
this._init(options);
};
Sub.prototype = Object.create(Super.prototype); // 子类继承于父类
Sub.prototype.constructor = Sub;
Sub.cid = cid++;
// 子类和父类构造器的配置选项进行合并
Sub.options = mergeOptions(
Super.options,
extendOptions
);
return Sub // 返回子类构造函数
};
为什么要先介绍子类构造器的概念呢,原因是在选项合并的代码中,除了需要合并Vue实例和Vue构造器自身的配置,还需要合并子类构造器和父类构造器选项的场景。