MCPcopy Index your code
hub / github.com/ygs-code/vue / resolveInject

Function resolveInject

vue.js:5345–5384  ·  view source on GitHub ↗
(inject, vm)

Source from the content-addressed store, hash-verified

5343
5344 // inject 选项应该是一个字符串数组或一个对象,该对象的 key 代表了本地绑定的名称,value 为其 key (字符串或 Symbol) 以在可用的注入中搜索。
5345 function resolveInject(inject, vm) {
5346
5347 if (inject) {
5348 // inject is :any because flow is not smart enough to figure out cached
5349 // inject是:any,因为flow不够智能,无法计算缓存
5350 var result = Object.create(null);
5351 var keys = hasSymbol ? //判断是否支持Symbol 数据类型
5352 Reflect.ownKeys(inject).filter(function (key) {
5353 //Object.getOwnPropertyDescriptor 查看描述对象 并且获取到enumerable 为true 的时候才会获取到该数组
5354 return Object.getOwnPropertyDescriptor(inject, key).enumerable
5355 }) :
5356 Object.keys(inject); //如果不支持hasSymbol 则降级用 Object.keys
5357
5358 // 将数组转化成对象 比如 [1,2,3]转化成
5359 // * normalized[1]={from: 1}
5360 for (var i = 0; i < keys.length; i++) { //循环key
5361 var key = keys[i]; //获取单个key值
5362 var provideKey = inject[key].from; //normalized[3]={from: 3} 获取key的值
5363 var source = vm;
5364 while (source) {
5365 if (source._provided && hasOwn(source._provided, provideKey)) { //判断_provided 存在么 并且是对象的时候,并且实例化属性provideKey 存在
5366 result[key] = source._provided[provideKey]; //获取值 存起来
5367 break
5368 }
5369 source = source.$parent; //循环父节点
5370 }
5371 if (!source) { //如果vm 不存在
5372 if ('default' in inject[key]) { // 判断default key存在inject[key]中么
5373 var provideDefault = inject[key].default; //如果存在则获取默认default的值
5374 result[key] = typeof provideDefault === 'function' //如果是函数则执行
5375 ? provideDefault.call(vm)
5376 : provideDefault;
5377 } else {
5378 warn(("Injection \"" + key + "\" not found"), vm);
5379 }
5380 }
5381 }
5382 return result
5383 }
5384 }
5385
5386 /* */
5387

Callers 2

initInjectionsFunction · 0.85
FunctionalRenderContextFunction · 0.85

Calls 1

hasOwnFunction · 0.85

Tested by

no test coverage detected