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)