如何在JavaScript中的对象上调用构造函数?

所以我正在寻找一种方法来深克隆在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);

我的问题是,我们是不是应该使用新的与构造?

var temporary_storage = new objectpassed.constructor(); 

然后我意识到传递的对象是使用对象文字{}和具有构造为Object()制成;

我做了第一类的构造函数的人()

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方法,它抛出一个错误,temporary_storage是不确定的含义

objectpassed.constructor(); 

必须返回undefined !

所以我想知道,我们或我们不使用构造函数之前的新关键字?

我使用了它,但没有找到任何令人满意的解释!

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 A() === new A.prototype.constructor(); 

A() === A.prototype.constructor();

以上是 如何在JavaScript中的对象上调用构造函数? 的全部内容, 来源链接: utcz.com/qa/257419.html

回到顶部