Skip to content

Instantly share code, notes, and snippets.

@abellion
Last active November 18, 2015 10:49
Show Gist options
  • Save abellion/7aed25b0f4de4a703932 to your computer and use it in GitHub Desktop.
Save abellion/7aed25b0f4de4a703932 to your computer and use it in GitHub Desktop.
Extend Object or Array own prototype.
function extendOwnPrototype(obj, prototype) {
var oldPrototype = Object.getPrototypeOf(obj);
var newPrototype = Object.create(oldPrototype);
var newObject = Object.create(newPrototype);
var length = Object.getOwnPropertyDescriptor(obj, 'length');
for (var key in prototype) {
Object.defineProperty(newPrototype, key, { 'value': prototype[key] });
}
for (var key in obj) {
obj.hasOwnProperty(key) && (newObject[key] = obj[key]);
}
length && Object.defineProperty(newObject, 'length', length);
return (newObject);
};
/* EXAMPLE */
var n = extendOwnPrototype(['val'], {
'fn': function() { /* ... */ }
});
var n2 = extendOwnPrototype({'key': 'val'}, {
'fn': function() { /* ... */ }
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment