Skip to content

Instantly share code, notes, and snippets.

@amatiasq
Last active February 15, 2021 22:18
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save amatiasq/5492466 to your computer and use it in GitHub Desktop.
Save amatiasq/5492466 to your computer and use it in GitHub Desktop.
Creates a copy of a object duplicating every property, even prototyped ones.
var extend = Object.getOwnPropertyNames ?
function ecma5extend(obj) {
var proto = obj;
var protos = [];
var result = {};
var descriptors = {};
while (proto) {
protos.push(proto);
proto = Object.getPrototypeOf(proto);
}
protos.reverse().forEach(function(ancestor) {
Object.getOwnPropertyNames(ancestor).forEach(function(prop) {
descriptors[prop] = Object.getOwnPropertyDescriptor(ancestor, prop);
});
});
Object.defineProperties(result, descriptors);
return result;
} :
function fallback(obj) {
var result = {};
for (var i in obj)
result[i] = obj[i];
return result;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment