SO Answer / Javascript cloned object looses its prototype functions
See: http://stackoverflow.com/questions/10151216/javascript-cloned-object-looses-its-prototype-functions
by KooiInc MeHere
JavaScript
function cloneObject(obj)
{
obj = obj && obj instanceof Object ? obj : '';
// Handle Date
if (obj instanceof Date) {
return new Date(obj);
}
// Handle Array
if (obj instanceof Array) {
return obj.slice();
}
// Handle Object
if (obj instanceof Object) {
var copy = new obj.constructor();
for (var attr in obj) {
if (obj.hasOwnProperty(attr)){
if (obj[attr] instanceof Object){
copy[attr] = cloneObject(obj[attr]);
} else {
copy[attr] = obj[attr];
}
}
}
return copy;
}
throw new Error("Unable to copy obj! Its type isn't supported.");
}
function MyObject(name)
{
this.name = name;
this.dat = new Date;
this.arr = [1,2,3,4,5];
this.obj = {somarr: [6,7,8],name:'nested_object'};
this.str = new String('mary had a little lamb'); //< string *Object* gets to be cloned
}
MyObject.prototype.render = function()
{
console.log("Render executing: "+this.name);
}
var base = new MyObject("base");
var clone = cloneObject(base);
clone.name = "clone";
base.render();
clone.render();
console.log(clone.dat.toUTCString());
console.log('is clone.arr a real clone? '+(base.arr !== clone.arr));
console.log('is clone.str a real clone? '+(base.str !== clone.str));
console.log(clone.obj.name+ '[somarr]: '+clone.obj.somarr);
var generateError = cloneObject('somestring');