以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
60. 实现自己的`new`

function myNew(constructor, ...args) {
  const obj = Object.create(constructor.prototype);
  const result = constructor.apply(obj, args);
  return typeof result === "object" ? result : obj;
}

使用方法:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.sayHello = function() {
  console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}

const john = myNew(Person, "John", 30);
john.sayHello(); // 输出:Hello, my name is John and I am 30 years old.

说明:

  • myNew() 接受一个构造函数和任意数量的参数。
  • 它首先创建一个空对象 obj,并将其原型链指向构造函数的原型对象。
  • 然后它调用构造函数并传递给它所有的参数。
  • 最后,它检查构造函数的返回值类型。如果它是一个对象,则返回该对象;否则返回创建的新对象 obj