Function.prototype.wrap = function f_wrap(){ var self = this; return function wrapper(x, y, z){ return (function wrapper_inner() { self(x, y, z); })(); }; }; var extend = function f_extend(thi$, key, value){ thi$[key] = value; }.wrap(); extend(Number, 'g', function i_am_reachable(x){ return x+19; }); Number.g(23);