Stel dat ik een variabele heb, die als volgt gedefinieerd is:
var a = function() {/* Statements */};
Ik wil een functie die controleert of het type van de variabele functie-achtig is. d.w.z. :
function foo(v) {if (v is function type?) {/* do something */}};
foo(a);
Hoe kan ik controleren of de variabele a
van het type Functie
is op de manier zoals hierboven gedefinieerd?
Natuurlijk is de manier van underscore's efficiënter, maar de beste manier om te controleren, wanneer efficiëntie geen probleem is, is geschreven op de pagina van underscore's gelinkt door @Paul Rosania.
Geïnspireerd door underscore, is de uiteindelijke isFunctie functie als volgt:
function isFunction(functionToCheck) {
return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
}
Underscore.js gebruikt een uitgebreidere maar zeer performante test:
_.isFunction = function(obj) {
return !!(obj && obj.constructor && obj.call && obj.apply);
};
Zie: http://jsperf.com/alternative-isfunction-implementations
EDIT: bijgewerkte tests suggereren dat typeof misschien sneller is, zie http://jsperf.com/alternative-isfunction-implementations/4