代码:
// 判断参数是不是纯粹的对象 通过{}、new Object()、Object.create(null)
isPlainObject: function( obj ) {
var proto, Ctor;
// 借用toString方法判断obj的类型是不是Object
if ( !obj || toString.call( obj ) !== "[object Object]" ) {
return false;
}
// 获取对象的原型
proto = getProto( obj );
// 通过Object.create( null )创建的对象返回true
if ( !proto ) {
return true;
}
// 判断对象是不是通过new Object()方式创建的
Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
// fnToString:将函数转换成字符串 ObjectFunctionString:function Object() { [native code] }
return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
}
疑惑:
为什么作者没有用Object.prototype.toString.call()方法?无论对象是由new Object()、{}、Object()创建的,这个方法的返回结果都是字符串[object Object],难道这里面还有些别的坑么?
请注明jQuery的版本,不同版本实现代码细节上有差异。另外,你贴的代码是jQuery的源码,如是,请标明。