怎样推断一个对象是一个函数呢?平常情况下,我们都是运用typeof
来举行范例推断,然则这个方法并非设想的那末好用,有时运用typeof
来推断正则表达式时,发如今firefox2中返回的是”object”,firefox3中返回”function”,特引见一种稳固的推断计划:
function isFunction(fn) {
return (!!fn&&!fn.nodename&&fn.constructor!=String&&fn.constructor!=RegExp&&fn.constructor!=Array&&/function/i.test(fn+""));
}
诠释:起首推断对象存在,检测是否是DOM元素,constructor指向建立当前对象的组织函数,那末这些fn.constructor!=String&&fn.constructor!=RegExp&&fn.constructor!=Array
人人就可以邃晓了吧,末了一个表达式/function/i.test(fn+"")
,先将fn转换成字符串,类似于”function name(){…}”,然后查找字符串中有没有“function”,/i
示意查找形式中疏忽大小写
看了批评以后,引荐一种更好用的方法,可以推断Array,String,Data,Function,Boolean,Number等范例。Object.prototype.toString()
来完成,这个函数可以获得对象的内部属性(class),函数实行历程以下:
- Get the [[Class]] property of this object.
- Compute a string value by concatenating the three strings “[object “, Result (1), and “]”.
- Return Result (2)
运用方法以下:
function isFunction(fn) {
return Object.prototype.toString.call(fn)=== '[object Function]';
}