JSFiddle - React, Tailwind, and code Playground

Checking Cloning

by Ben Clayton

JavaScript

function extend(from, to)
{
		
    if (from == null || typeof from != "object") return from;
    if (from.constructor != Object && from.constructor != Array) return from;
    if (from.constructor == Date || from.constructor == RegExp || from.constructor == Function ||
        from.constructor == String || from.constructor == Number || from.constructor == Boolean)
        return new from.constructor(from);

    to = to || new from.constructor();

    for (var name in from)
    {
        to[name] = typeof to[name] == "undefined" ? extend(from[name], null) : to[name];
    }

    return to;
}
//======================================================================
var obj =
{
    date: new Date(),
    func: function(q) { return 1 + q; },
    num: 123,
    text: "asdasd",
    array: [1, "asd"],
    regex: new RegExp(/aaa/i),
    subobj:
    {
        num: 234,
        text: "asdsaD"
    }
}

var clone = jQuery.extend(obj,true);

console.log("clone.date is ", obj.date.constructor)
console.log("clone.date is ", (obj.date.constructor==Date) )

// change the clone
clone.num=567;
clone.subobj.num=999;
clone.array[1]="xyz";

// This is shows that 'num' property is cloned
console.log(clone.num === obj.num)
console.log("clone.num ",clone.num)
console.log("obj.num ",obj.num)

console.log("clone.subobj.num ",clone.subobj.num)
console.log("obj.subobj.num ",obj.subobj.num)

console.log("clone.array[1] ",clone.array[1])
console.log("obj.array[1] ",obj.array[1])


// change the cloned date object
clone.date.setYear(2000)

// Hmm this is not a deep clone ??????
console.log(clone.date === obj.date)
console.log("clone.date ",clone.date)
console.log("obj.date ",obj.date)