如何在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