在了解Angular启动过程之前,首先了解几个必要的Angular的工具函数:
isFunction
|
|
不多解释,判断是否是函数类型。
isArray
|
|
判断是否是数组类型,代码关键在于toString.call(value)
返回的值.
这里需要注意Object.prototype.toString.call(this)
和Object.prototype.toString(this)
的区别。举个例子:
|
|
由于在使用call/apply时会进行基本类型到包装类型的装换(一般在非严格模式下),所以当用foo.call('hello')
以后,this指向的实际是new String('hello')
一个String对象.
而通过Object.prototype.toString.apply/call
可以间接拿到对象的内部[[class]]
标签,对于String对象会返回[object String]
.
直接调用Object.prototype.toString
返回[object Object]
是因为this指针指向的是Object.prototype
.
那么下面这段代码输出什么就显而易见了:
|
|
forEach
|
|
在读forEach函数的时候,有个地方是我所不理解的:
|
|
forEach函数首先会传进来的obj做一次判断,是否为函数,接着它居然对函数进行for (key in obj)
的操作,注意这时的key是undefined.后来在百度大神黄子毅的解释下,写了一个demo:
|
|
有木有觉得很神奇?类,class的typeof本质是function,当你定义Function.prototype
了以后,对函数进行for in
操作时,它的prototype
居然可以被得到.