vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
1.子类父类
2.Vue.extend() //创建vue的子类
组件的语法器Vue.extend(options)
Profile().$mount('#app')//挂在app上,并替换app
新建initExend
==》Vue.extend
3.strat.data
==>if(!vm){子组件中data的值是一个方法function==>mergeDataorFn()}//数据的合并
==>else{}//通过实例绑定的data实际是一个函数mergeDataorFn
==》mergeDataorFnif(!vm)mergeDataFn==>mergeData()
else==》mergedInstanceDataFn==>mergeData()
mergeData(to,from)//终极合并
jquery.extend//深copy和浅copy
//大体思路(二)
//1.子类父类
/*
2.Vue.extend()//创建vue的子类
组件的语法器Vue.extend(options)
Profile().$mount('#app')//挂在app上,并替换app
新建initExend
==》Vue.extend
*/
/*3.strat.data
==>if(!vm){子组件中data的值是一个方法function==>mergeDataorFn()}//数据的合并
==>else{}//通过实例绑定的data实际是一个函数mergeDataorFn
==》mergeDataorFnif(!vm)mergeDataFn==>mergeData()
else==》mergedInstanceDataFn==>mergeData()
mergeData(to,from)//终极合并
jquery.extend//深copy和浅copy
*/
(function(global,factory){
//兼容cmd
typeofexports==='object'&&module!=='undefined'?module.exports=factory():
//Amd
typeofdefine==='function'&&define.amd?define(factory):global.Vue=factory();
})(this,function(){
varuip=0;
functionwarn(string){
console.error('VueWran:'+string)
}
functionresolveConstructorOptions(Con){
varoptions=Con.options;
//判断是否为vm的实例或者是子类
returnoptions
}
varhasOwnPropeerty=Object.prototype.hasOwnProperty
functionhasOwn(obj,key){
returnhasOwnPropeerty.call(obj,key)
}
functionmakeMap(str,expectsLoweraseC){
if(expectsLoweraseC){
str=str.toLowerCase()
}
varmap=Object.create(null)
varlist=str.split(',')
for(vari=0;i