(function(){
function isFunction(fn) {
  if(typeof fn != "function") return false;
  if(typeof fn.constructor != "function") return false;
  return fn.constructor.prototype.hasOwnProperty( "call" );
}
var obj = { call: function(){} };
var htmlColl = document.links;
var nodeList = document.getElementsByTagName("div");

var trues = [
  isFunction(parseInt)    // true
  ,isFunction(Function()) // true
  ,isFunction(Object)     // true
];
var falses = [
  isFunction( obj )      // false 1
  ,isFunction( nodeList ) // false 2 
  ,isFunction( htmlColl ) // false 3
  ,isFunction(Array())    // false 4 
  ,isFunction(undefined)  // false 5, no error
  ,isFunction(true)       // false 6, no error
];
return trues.concat(falses).join(" ");
})();
Expected: true true true false false false false false false
Actual: