toRawType 函数
上篇文章里,我们介绍了变量 _toString 表示 Object.prototype.toString() 方法,它是在顶级作用域下声明的,并在多个函数里用到:
const _toString = Object.prototype.toString
函数 toRawType 接收 value 作为参数,返回一个字符串:
function toRawType (value: any): string {
return _toString.call(value).slice(8, -1)
}
返回语句调用了 Object.prototype.toString() 方法,参数为 value,然后切分提取(slice)返回的值:
_toString.call(value).slice(8, -1)
我们来看个例子,在切分提取前做了什么。假设你穿了一个对象 anObject 给 _toString.call 调用,返回值将会是:'[object Object]'。
现在,我们看下 slice 方法。“slice() 方法提取字符串的某一部分,并返回一个新的字符串。”第一个参数作为提取字符的开始索引,第二个参数(可选)是作为提取字符的结束索引。如果结束索引为负数,结尾处为该字符的长度减去这个数字。
那么,你期望 _toString.call(value).slice(8, -1) 之后会发生什么呢?
其实,在上面参数为对象的例子中,slice 方法开始出在 Object 的“O”,结尾处为右括号。因此,你会得到所处值的原生类型,在这里是:“Object”。
我们已经学习了一系列函数,例如 toRawType ,这个函数是在 normalizeProps 函数中遇到的。现在,我们已经学习了 normalizeProps 函数的每一部分,接下来,我们可以回到函数 mergeOptions (normalizeInject 函数)中。
function mergeOptions (
parent: Object,
child: Object,
vm?: Component
): Object {
if (process.env.NODE_ENV !== 'production') {
checkComponents(child)
}
if (typeof child === 'function') {
child = child.options
}
normalizeProps(child, vm)
normalizeInject(child, vm)
// [...]
下一章,我们将要学习下 normalizeInject 函数。