话说话说你对vue的mixin的理解,有什么应用场景?
2025-05-08 运营
n对于嵌入一些可则否的功能特质如此有趣、不便、实用性三、程式库分析
维生素d3
儿童不爱吃饭偏瘦怎么办
类风湿性关节炎不舒服怎么治疗
宝宝拉稀了怎么办
怎样治疗腰椎病最有效
治疗新冠的药有哪几种药
类风湿关节痛手指僵硬有什么药吃
吃太辣肚子痛喝什么治疗好
双手关节僵硬什么原因
首到时从Vue.mixin入手
程式库左边:/src/core/global-api/mixin.js
export function initMixin (Vue: GlobalAPI) { Vue.mixin = function (mixin: Object) { this.options = mergeOptions(this.options, mixin) return this }}主要是数组调用merOptions原理
程式库左边:/src/core/util/options.js
export function mergeOptions ( parent: Object, child: Object, vm?: Component): Object {if (child.mixins) { // 推论有从未mixin 也就是mixin里面放mixin的情况 有的话操作符顺利进行新设 for (let i = 0, l = child.mixins.length; i < l; i++) { parent = mergeOptions(parent, child.mixins[i], vm) }} const options = {} let key for (key in parent) { mergeField(key) // 到时二叉树parent的key 调对应的strats[XXX]原理顺利进行新设 } for (key in child) { if (!hasOwn(parent, key)) { // 如果parent已经处理过某个key 就不处理了 mergeField(key) // 处理child中的的key 也就parent中的从未处理过的key } } function mergeField (key) { const strat = strats[key] || defaultStrat options[key] = strat(parent[key], child[key], vm, key) // 根据并不相同类DF的options数组调用strats中的并不相同的原理顺利进行新设 } return options}从前面的程式库,我们想得到以下几点:
应将操作符处理 mixins到时二叉树新设parent 中的的key,数组调用mergeField原理顺利进行新设,然后留有在变量options再行二叉树 child,新设补上 parent 中的从未的key,数组调用mergeField原理顺利进行新设,留有在变量options通过 mergeField 数组顺利进行了新设后面是关于Vue的几种类DF的新设意图
更换DF新设DF描述符DF渐变DF#更换DF更换DF新设有props、methods、inject、computed
strats.props =strats.methods =strats.inject =strats.computed = function ( parentVal: ?Object, childVal: ?Object, vm?: Component, key: string): ?Object { if (!parentVal) return childVal // 如果parentVal从未参数,直接来到childVal const ret = Object.create(null) // 创立一个第三方并不一定 ret extend(ret, parentVal) // extend原理实际是把parentVal的属特质读取ret中的 if (childVal) extend(ret, childVal) // 把childVal的属特质读取ret中的 return ret}strats.provide = mergeDataOrFn同名的props、methods、inject、computed但会被后来者正因如此
新设DF和并DF新设有:data
strats.data = function(parentVal, childVal, vm) { return mergeDataOrFn( parentVal, childVal, vm )};function mergeDataOrFn(parentVal, childVal, vm) { return function mergedInstanceDataFn() { var childData = childVal.call(vm, vm) // 制订data放的数组想得到并不一定 var parentData = parentVal.call(vm, vm) if (childData) { return mergeData(childData, parentData) // 将2个并不一定顺利进行新设 } else { return parentData // 如果从未childData 直接来到parentData } }}function mergeData(to, from) { if (!from) return to var key, toVal, fromVal; var keys = Object.keys(from); for (var i = 0; i < keys.length; i++) { key = keys[i]; toVal = to[key]; fromVal = from[key]; // 如果不存在这个属特质,就原先设置 if (!to.hasOwnProperty(key)) { set(to, key, fromVal); } // 存在相异属特质,新设并不一定 else if (typeof toVal =="object" && typeof fromVal =="object") { mergeData(toVal, fromVal); } } return to}mergeData数组二叉树了要新设的 data 的所有属特质,然后根据并不相同情况顺利进行新设:
当目标 data 并不一定不还包括也就是说属特质时,数组调用 set 原理顺利进行新设(set原理说是就是一些新设原先表达式的原理)当目标 data 并不一定还包括也就是说属特质并且也就是说参数为则有并不一定时,操作符新设也就是说并不一定参数,这样做是为了防止并不一定存在可选属特质描述符特质描述符特质新设有:全部有机体和watch
function mergeHook ( parentVal: ?Array, childVal: ?Function | ?Array): ?Array { return childVal ? parentVal ? parentVal.concat(childVal) : Array.isArray(childVal) ? childVal : [childVal] : parentVal}LIFECYCLE_HOOKS.forEach(hook => { strats[hook] = mergeHook})// watchstrats.watch = function ( parentVal, childVal, vm, key) { // work around Firefox's Object.prototype.watch... if (parentVal === nativeWatch) { parentVal = undefined; } if (childVal === nativeWatch) { childVal = undefined; } /* istanbul ignore if */ if (!childVal) { return Object.create(parentVal || null) } { assertObjectType(key, childVal, vm); } if (!parentVal) { return childVal } var ret = {}; extend(ret, parentVal); for (var key$1 in childVal) { var parent = ret[key$1]; var child = childVal[key$1]; if (parent && !Array.isArray(parent)) { parent = [parent]; } ret[key$1] = parent ? parent.concat(child) : Array.isArray(child) ? child : [child]; } return ret};有机体把手和watch被新设为一个嵌套,然后正序二叉树一次制订
#渐变DF渐变DF新设有:component、directives、filters
strats.components=strats.directives=strats.filters = function mergeAssets( parentVal, childVal, vm, key) { var res = Object.create(parentVal || null); if (childVal) { for (var key in childVal) { res[key] = childVal[key]; } } return res}渐变DF主要是通过原DF链顺利进行层层的渐变
小结:更换DF意图有props、methods、inject、computed,就是将新的同名常量替代原到时的常量新设DF意图是data, 通过set原理顺利进行新设和原先表达式描述符DF意图有有机体数组和watch,原理是将数组存入一个嵌套,然后正序二叉树依次制订渐变DF有component、directives、filters,通过原DF链顺利进行层层的渐变我建了一个【内侧努力学习群】,【免费领取努力学习资料】或努力学习的班上可以关注我:内侧努力学习交流 - 知乎
。英特盐酸达泊西汀能治疗早泄吗维生素d3
儿童不爱吃饭偏瘦怎么办
类风湿性关节炎不舒服怎么治疗
宝宝拉稀了怎么办
怎样治疗腰椎病最有效
治疗新冠的药有哪几种药
类风湿关节痛手指僵硬有什么药吃
吃太辣肚子痛喝什么治疗好
双手关节僵硬什么原因
相关阅读
- 05-11延安网红“红街兔兔”举办线上音乐会,偏偏延安腰鼓、唢呐、说书艺人全来了
- 05-11科创板一千多个日子过去了:首批科创主题3年封闭基金“封转开” 收益却相距很多
- 05-11珠三角乐高乐园度假区二期规划公示 预计2024年上半年投入运营
- 05-11潍坊市中小学生创意问世作品大赛成功举办
- 05-11《潜伏》:余则成窜改的那段录音,在当时就不能鉴别真伪吗?
- 05-11深圳乐高乐园度假区二期规划公示 预计2024年上半年转回运营
- 05-11深夜破位!道指攀升800点,全球市场“黑色周一”!A股能否继续“独立”?通胀阴霾笼罩,国内商品承压
- 05-11《潜伏》:余则成伪造的那段录音,在当时就不能鉴定真伪吗?
- 05-11深夜破位!道指崩盘800点,全球市场“黑色周一”!A股能否继续“独立”?通胀阴霾笼罩,国内商品承压
- 05-11这两本关于武汉的童话故事,杜伊斯堡市长要留下来女儿