[英]How to call a constructor function on an object in javascript?
因此,我正在寻找一种方法来在javascript中深度克隆对象并找到以下解决方案:
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);
我的问题是,我们不应该在构造函数中使用new吗?
var temporary_storage = new objectpassed.constructor();
然后我意识到传递的对象是使用对象常量{}制作的,并具有构造函数作为Object();
我做了一个一流的构造函数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));
现在,当我使用keepCloning方法时,它引发了一个错误,即临时存储未定义,这意味着
objectpassed.constructor();
必须返回undefined!
所以我想知道我们还是在构造函数之前不使用new关键字?
我用谷歌搜索,但没有找到满意的解释!
2)在相同问题的背景下
function A(){
}
var a = new A(); //1
var a1= A.prototype.constructor(); //2
var a1 = new A.prototype.constructor(); //3
(2)和(3)中的哪一个与(1)中构造A对象的方法完全相似?
new constructor();
等于
(function(){
const obj = Object.create(constructor.prototype);
constructor.call(obj);
return obj;
})()
因此,使用new时,它会返回一个新对象,而无需调用构造函数,而不会返回未定义的对象。 所以是强制性的。
new A() === new A.prototype.constructor();
A() === A.prototype.constructor();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.