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');