Skip to content

Instantly share code, notes, and snippets.

@bga
Created November 10, 2010 23:09
Show Gist options
  • Save bga/671702 to your computer and use it in GitHub Desktop.
Save bga/671702 to your computer and use it in GitHub Desktop.
(function($G)
{
var _extend =
Object.getOwnPropertyNames && function(from, to)
{
var keys = Object.getOwnPropertyNames(from);
var i = keys.length; while(i--)
{
var key = keys[i];
to[key] = from[key];
}
} ||
function(from, to)
{
for(var i in from)
{
if(from.hasOwnProperty(i))
to[i] = from[i];
}
}
;
var defaultThis = (function(){ return this; })();
var _wrap = function(name, _wrap)
{
var Old = $G[name];
var toString = String(Old);
var Wrapper = _wrap(name);
_extend(Old, Wrapper);
Wrapper.toString = function(){ return toString };
Wrapper.prototype = Old.prototype;
Old.prototype.constructor = Wrapper;
$G[name] = Wrapper;
};
var _newAndCast = function(name)
{
var Old = $G[name];
return function()
{
console.log(name);
if(this === defaultThis) // cast
return Old.apply(null, arguments);
else // new
Old.apply(this, arguments);
}
};
var _new = function(name)
{
var Old = $G[name];
return function()
{
console.log(name);
return Old.apply(null, arguments);
}
};
_wrap('Object', _newAndCast);
_wrap('Function', _new);
_wrap('Boolean', _newAndCast);
_wrap('Number', _newAndCast);
_wrap('String', _newAndCast);
_wrap('RegExp', _new);
_wrap('Date', _new);
})(this);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment