High Order Function
var Type = {} for(var i =0, type; type =['String','Array','Number'][i++];){ (function(type){ Type['is'+type] = function(obj){ return Object.prototype.toString.call(obj) === '[object ' + type + ']'; } })(type) }; Type.isArray([]); Type.isString('abc'); var getSingle = function(fn){ var ret; return function(){ return ret || (ret = fn.apply(this, arguments)); }; }; var getScript = getSingle(function(){ return document.createElement('script'): }) var script1 = getScript(); var script2 = getScript(); console.log(script1 === script2);