isArray与isFunction方法的内部实现方式很简单,调用了toString.call(),然后判断其结果的字符串
isEmptyObject方法则是使用了一个for in循环,只要取得一个元素,就return false
isPlainObject,首先,如果是false,或本身不是一个object,或者是一个DOM或Window,直接返回false;其次判断对象的引用,constructor是对创建对象的函数的引用(指针)。对于 Object 对象,该指针指向原始的 Object() 函数,判断obj是否具有isPrototypeOf属性,isPrototypeOf是挂在Object.prototype上的。通过字面量或自定义类(构造器)创建的对象都会继承该属性方法。最后,如果是一个空对象,或者对象内全是属性(仅检查最后一个是否为属性),就返回true。