繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM