以下为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
。