Object.defineProperty(Object.prototype, "spawn", {value: function (props) { var defs = {}, key; for (key in props) { if (props.hasOwnProperty(key)) { defs[key] = {value: props[key], enumerable: true}; } } var o = Object.create(this, defs); o.initialize && o.initialize(); return o; }}); Object.defineProperty(Object.prototype, "extend", { enumerable: false, value: function(from) { var props = Object.getOwnPropertyNames(from); var dest = this; props.forEach(function(name) { if (name in dest) { var destination = Object.getOwnPropertyDescriptor(from, name); Object.defineProperty(dest, name, destination); } }); return this; } });