Preparation Code Preparation HTML (this will be inserted in the <body>
of a valid HTML5 document in standards mode) (useful when testing DOM operations or including libraries) <script >
function closure ( ) {
return function ( ) {
return 42 ;
};
}
var
getClass = {}.toString ,
hasProperty = {}.hasOwnProperty ,
noop = function ( ){},
objectToString = {}.toString ,
objectHasOwnProperty = {}.hasOwnProperty ,
expression = /Kit/g ,
browserAlert = alert,
objectConstructor = Object ,
dateConstructor = Date ,
stringConstructor = String ,
int = 12345 ,
emptyStr = "" ,
longStr = "abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789" ;
function isFunctionA (object ) {
return !!(object && getClass.call (object) == '[object Function]' );
}
function isFunctionB (object ) {
if (typeof object != 'function' ) return false ;
var parent = object.constructor && object.constructor .prototype ;
return parent && hasProperty.call (parent, 'call' );
}
function isFunctionC (object ) {
return !!(object && object.constructor && object.call && object.apply );
}
function isFunctionD (object ) {
return typeof (object) == 'function' ;
}
function isFunctionE (object ) {
return object instanceof Function ;
}
function isFunctionF (object ) {
return object === Object (object);
}
var toStr = Object .prototype .toString ;
function isFunctionF (object ) {
return toStr.call (object) == '[object Function]' ;
}
function isFunctionAb (object ) {
return !!(object && getClass.call (object) === '[object Function]' );
}
function isFunctionDb (object ) {
return typeof (object) === 'function' ;
}
function benchmarkIsFunction (fnc )
{
fnc (noop);
fnc (objectToString);
fnc (objectHasOwnProperty);
fnc (expression);
fnc (browserAlert);
fnc (objectConstructor);
fnc (dateConstructor);
fnc (stringConstructor);
fnc (int);
fnc (emptyStr);
fnc (longStr);
fnc (undefined );
fnc (closure);
}
function verify (verified, fnc, name, data )
{
if (!verified && typeof console !== "undefined" && typeof console .error !== "undefined" )
{
console .error (name + " failed the functionality test for data " + data);
}
}
function verifyIsFunction (fnc, name )
{
verify (fnc (noop) === true , fnc, name, "noop" );
verify (fnc (objectToString) === true , fnc, name, "objectToString" );
verify (fnc (objectHasOwnProperty) === true , fnc, name, "objectHasOwnProperty" );
verify (fnc (expression) === false , fnc, name, "expression" );
verify (fnc (browserAlert) === true , fnc, name, "browserAlert" );
verify (fnc (objectConstructor) === true , fnc, name, "objectConstructor" );
verify (fnc (dateConstructor) === true , fnc, name, "dateConstructor" );
verify (fnc (stringConstructor) === true , fnc, name, "stringConstructor" );
verify (fnc (int) === false , fnc, name, "int" );
verify (fnc (emptyStr) === false , fnc, name, "emptyStr" );
verify (fnc (longStr) === false , fnc, name, "longStr" );
verify (fnc (undefined ) === false , fnc, name, "undefined" );
verify (fnc (closure) === true , fnc, name, "closure" );
verify (fnc (closure ()) === true , fnc, name, "closure()" );
verify (fnc (function ( ){}) === true , fnc, name, "function(){}" );
}
verifyIsFunction (isFunctionA, "A" );
verifyIsFunction (isFunctionB, "B" );
verifyIsFunction (isFunctionC, "C" );
verifyIsFunction (isFunctionD, "D" );
verifyIsFunction (isFunctionE, "E" );
verifyIsFunction (isFunctionF, "F" );
verifyIsFunction (isFunctionAb, "Ab" );
verifyIsFunction (isFunctionDb, "Db" );
</script >
Setup JS
Teardown JS