Skip to content

Instantly share code, notes, and snippets.

@sandipchitale
Last active September 14, 2018 22:17
Show Gist options
  • Select an option

  • Save sandipchitale/0bc1b079fdce65ea065d79fb669cc09c to your computer and use it in GitHub Desktop.

Select an option

Save sandipchitale/0bc1b079fdce65ea065d79fb669cc09c to your computer and use it in GitHub Desktop.
Generic constructor override with example of Date
(function (context, constructorName, special) {
var Original;
Original = context[constructorName];
context[constructorName] = function PatchedOriginal() {
var args;
args = Array.prototype.slice.call(arguments);
var returnObject;
if (special) {
returnObject = special(Original, PatchedOriginal, args);
}
if (returnObject != null) {
return returnObject;
}
if (args.length === 0) {
return new Original();
} else if (args.length === 1) {
return new Original(args[0]);
} else if (args.length === 2) {
return new Original(args[0], args[1]);
} else if (args.length === 3) {
return new Original(args[0], args[1], args[2]);
} else if (args.length === 4) {
return new Original(args[0], args[1], args[2], args[3]);
} else if (args.length === 5) {
return new Original(args[0], args[1], args[2], args[3], args[4]);
} else if (args.length === 6) {
return new Original(args[0], args[1], args[2], args[3], args[4], args[5]);
} else if (args.length === 7) {
return new Original(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
} else if (args.length === 8) {
return new Original(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
}
}
// Copy static properties
for (var prop in Original) {
if (Original.hasOwnProperty(prop)) {
context[constructorName][prop] = Original[prop];
}
}
}(window, 'Date', function(Original, PatchedOriginal, args) {
if (args.length == 1) {
return new Original(args[0].getTime());
}
return null;
}));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment