深入剖析Vue源码 - 选项合并(下)
上一节的末尾,我们介绍了Vue中处理合并选项的思路,概括起来主要有两点,一是当选项存在定义好的默认配置策略时,优先选择默认配置策略,并且根据不同的配置项来合并子父选项; 二是当传入选项不存在默认策略时,处理的原则是有子类配置选项则默认使用子类配置选项,没有则选择父类配置选项。vue中,大部分选项都有其自定义策略,因此本节分析的重点也放在了各种自定义配置策略中(内置资源选项,生命周期钩子选项,el, data, watch, props等)。
首先还是回顾一下选项合并的代码,strat这个对象包含了所以自定义的默认策略。
function mergeOptions ( parent, child, vm ) {
···
var options = {};
var key;
for (key in parent) {
mergeField(key);
}
for (key in child) {
if (!hasOwn(parent, key)) {
mergeField(key);
}
}
function mergeField (key) {
var strat = strats[key] || defaultStrat; // 如果有自定义选项策略,则使用自定义选项策略,否则选择子类配置选项
options[key] = strat(parent[key], child[key], vm, key);
}
return options
}