JSFiddle - React, Tailwind, and code Playground
JavaScript
var class_type = {
'[object Date]' : Date,
'[object Array]' : Array,
'[object Object]' : Object
};
function deepCopy(obj)
{
var type = getType(obj);
if(!type){
throw 'Can\'t create';
}
var newObject = new type;
for(prop in obj){
var propType = getType(obj[prop]);
if(propType){
newObject[prop] = deepCopy(obj[prop])
} else {
newObject[prop] = obj[prop];
}
}
return newObject;
}
function getType(variable)
{
var type = Object.prototype.toString.call(variable);
if(!(type in class_type)){
return false;
}
return class_type[type];
}
var a = { x: 1, y: 2, z: [1, 2, 3], w: new Date(2014, 1, 1, 12, 0, 0) };
var b = deepCopy(a); // b — это отдельный объект
b.x = 10;
console.log(a.x); // 1
// a.z и b.z указывают на разные массивы:
b.z.push(4);
console.log(a.z); // [1, 2, 3]
// a.w и b.w независимы друг от друга
b.w.setYear(2015);
console.log(a.w.getFullYear()); // 2014