在了解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居然可以被得到.