跳到主要内容

实现一个new?

当你使用 new 运算符时,它实际上是创建了一个新的对象,并且将这个新对象的 __proto__ 指向了构造函数的原型对象。然后调用构造函数,并将新创建的对象作为 this 上下文。最后,如果构造函数没有显式返回一个对象,则返回这个新对象。

演示如何实现一个 new 方法:

function myNew(constructor, ...args) {
// 创建一个新对象,该对象的原型指向构造函数的原型对象
const obj = Object.create(constructor.prototype);

// 调用构造函数,并将新创建的对象作为上下文
const result = constructor.apply(obj, args);

// 如果构造函数返回了一个对象,则返回这个对象;否则返回新创建的对象
return typeof result === "object" && result !== null ? result : obj;
}

// 测试一下
function Person(name, age) {
this.name = name;
this.age = age;
}

const person1 = myNew(Person, "Alice", 30);
console.log(person1.name); // 输出: Alice
console.log(person1.age); // 输出: 30
console.log(person1 instanceof Person); // 输出: true