So I was searching for a way to deep clone an object in javascript and found this solution :
function keepCloning(objectpassed) {
if (objectpassed === null || typeof objectpassed !== 'object') {
return objectpassed;
}
// give temporary-storage the original obj's constructor
var temporary_storage = objectpassed.constructor();
for (var key in objectpassed) {
temporary_storage[key] = keepCloning(objectpassed[key]);
}
return temporary_storage;
}
var employeeDetailsOriginal = { name: 'Manjula', age: 25, Profession: 'Software Engineer' };
var employeeDetailsDuplicate = (keepCloning(employeeDetailsOriginal));
employeeDetailsOriginal.name = "NameChanged";
console.log(employeeDetailsOriginal);
console.log(employeeDetailsDuplicate);
My question was that shouldn't we be using new with the constructor?
var temporary_storage = new objectpassed.constructor();
Then I realised that the object passed is made using object literals{} and have constructor as Object();
I made a first class constructor function Person()
function Person(name, age, profession){
this.name=name;
this.age=age;
this.profession=profession;
}
var employeeDetailsOriginal = new Person('Manjula', 25,'Software Engineer');
var employeeDetailsDuplicate (keepCloning(employeeDetailsOriginal));
Now when I used the keepCloning method, it threw an error that temporary_storage is undefined meaning that
objectpassed.constructor();
must have returned undefined!
So I want to know that do we or do we not use the new keyword before constructor?
I googled it but didn't found any satisfactory explanation!
2) In the same context of the question
function A(){
}
var a = new A(); //1
var a1= A.prototype.constructor(); //2
var a1 = new A.prototype.constructor(); //3
Which of the (2) and (3) is the exactly similar method to (1) for constructing an object of A?
var newobject = JSON.parse(JSON.stringify(oldobject))Does that work for your use case?cloned = Object.assign({}, original);- why so complicated?