(
key, //key
propOptions, //原始props 参数
propsData, //转义过的组件props数据
vm // VueComponent 组件构造函数
)
| 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( |
no test coverage detected