$.type源码分析

var class2type = {};
var toString = class2type.toString;
//保存tostring,调用{}.tostring.call(obj);或者Object.prototype.tostring.call(obj);获取内置类型
var hasOwn = class2type.hasOwnProperty;
//所以class2type[["object Boolean"]:"boolean","[object Number]":"number","[object Function]":"function"]等
jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
});

上面是里面牵涉的数组,下面是源码:

//如果是null,就直接返回“null”字符串,所以alert(typeof $.type(null));返回的是string,因为$.typeof(null)返回的是""+null
type: function( obj ) {
if ( obj == null ) {
return obj + "";
}
//'如果是object或者function,先查询集合class2type,如果没有查询到就返回object。
return typeof obj === "object" || typeof obj === "function" ?
class2type[ toString.call(obj) ] || "object" :
typeof obj;
}

写两个例子有助于理解:

function Test()
{
}
alert($.type(Test));//返回function
alert(typeof Test);//返回function
alert({}.toString.call(Test));//返回[object Function]

总结:

(1)所以只要返回function或者object就要查询class2type集合,所以$.type(Test)查询class2type["object Function"]查询出来就是function

你可能感兴趣的:(jQuery源码)