JSFiddle - React, Tailwind, and code Playground
HTML
<script>
var exportCtor = (function() {
var ownNames = {}.constructor.getOwnPropertyNames || function( obj ) {
var r = [];
for( var key in obj ) {
if( hasOwn.call( obj, key ) ) {
r.push( key );
}
}
return r;
},
hasOwn = {}.hasOwnProperty,
rnocopy = /(?:^_|^(?:length|name|arguments|caller|callee)$)/;
return function exportCtor( Constructor ) {
var params = new Array( Constructor.length ),
instantiateCode = "";
for( var i = 0, len = params.length; i < len; ++i ) {
params[i] = "param$" + i;
}
if( params.length ) {
instantiateCode = "switch( arguments.length ) {\n";
for( var i = params.length - 1; i >= 0; --i ) {
instantiateCode += "case "+ (i + 1) + ": return new Constructor(" + params.slice(0, i + 1).join( ", " ) + ");\n";
}
instantiateCode += "case 0: return new Constructor();\n}\nthrow new Error(\"too many arguments\");\n";
}
else {
instantiateCode = "return new Constructor();";
}
var code = "return function ConstructorProxy(" + params.join( ", " ) + ") { \"use strict\"; " + instantiateCode + "};";
var ret = new Function( "Constructor", code )( Constructor );
var names = ownNames( Constructor );
for( var i = 0, len = names.length; i < len; ++i ) {
if( !rnocopy.test( names[ i ] ) ) {
ret[ names[ i ] ] = Constructor[ names[ i ] ];
}
}
return ret;
};
})();
</script>
JavaScript
var Waffle = (function() {
function Waffle() {
this.tastes = "yummy"
}
return exportCtor( Waffle );
})();
var waffle = Waffle();
alert(waffle.tastes);