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

Function validateProp

vue.js:2281–2347  ·  view source on GitHub ↗
(
        key,  //key
        propOptions,  //原始props 参数
        propsData, //转义过的组件props数据
        vm //    VueComponent 组件构造函数
    )

Source from the content-addressed store, hash-verified

2279 *
2280 */
2281 function validateProp(
2282 key, //key
2283 propOptions, //原始props 参数
2284 propsData, //转义过的组件props数据
2285 vm // VueComponent 组件构造函数
2286 ) { //vm this属性
2287
2288
2289 var prop = propOptions[key]; //获取组件定义的props 属性
2290 var absent = !hasOwn(propsData, key); // 如果该为假的那么可能 a-b 这样的key才能获取到值
2291 var value = propsData[key]; // 获取值
2292 // boolean casting
2293 //Boolean 传一个布尔值 但是 一般是函数或者数组函数才有意义,而且是函数声明的函数并不是 函数表达式prop.type 也需要是函数
2294 //返回的是相同的索引 判断 属性类型定义的是否是Boolean
2295 var booleanIndex = getTypeIndex(Boolean, prop.type);
2296 if (booleanIndex > -1) { //如果是boolean值
2297
2298 if (absent && !hasOwn(prop, 'default')) { //如果key 不是propsData 实例化,或者 没有定义default 默认值的时候 设置value 为false
2299 value = false;
2300 } else if (
2301 value === '' //如果value 是空
2302 || value === hyphenate(key) //或者key转出 - 形式和value 相等的时候
2303 ) { //
2304 // only cast empty string / same name to boolean if 仅将空字符串/相同名称转换为boolean if
2305 // boolean has higher priority 获取到相同的
2306 //判断prop.type 的类型是否是string字符串类型
2307 var stringIndex = getTypeIndex(String, prop.type);
2308
2309 if (
2310 stringIndex < 0 || //如果匹配不到字符串
2311 booleanIndex < stringIndex) { //或者布尔值索引小于字符串 索引的时候
2312 value = true;
2313 }
2314 }
2315 }
2316 // check default value 检查默认值
2317 if (value === undefined) { //如果没有值 value 也不是boolean, 也不是string的时候
2318 // 有可能是 函数
2319 value = getPropDefaultValue(vm, prop, key);
2320 // since the default value is a fresh copy, 由于默认值是一个新的副本,
2321 // make sure to observe it. 一定要遵守。
2322 var prevShouldObserve = shouldObserve;
2323 toggleObserving(true);
2324 console.log('===value===')
2325 console.log(value);
2326 //为 value添加 value.__ob__ 属性,把value添加到观察者中
2327 observe(value);
2328 toggleObserving(prevShouldObserve);
2329 }
2330 {
2331 console.log(prop,
2332 key,
2333 value,
2334 vm,
2335 absent)
2336
2337 //检查prop 是否合格
2338 assertProp(

Callers 3

updateChildComponentFunction · 0.85
loopFunction · 0.85

Calls 6

hasOwnFunction · 0.85
getTypeIndexFunction · 0.85
getPropDefaultValueFunction · 0.85
toggleObservingFunction · 0.85
observeFunction · 0.85
assertPropFunction · 0.85

Tested by

no test coverage detected