js如何实现new
实现 new 操作符
在 JavaScript 中,new 操作符用于创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。以下是手动实现 new 操作符的步骤:
-
创建一个新对象
创建一个空对象,该对象的原型指向构造函数的prototype属性。const obj = Object.create(constructor.prototype); -
绑定 this 并执行构造函数
将构造函数的this指向新创建的对象,并执行构造函数内部的代码。
const result = constructor.apply(obj, args); -
处理返回值
如果构造函数返回一个对象(非原始值),则返回该对象;否则返回新创建的对象。return result instanceof Object ? result : obj;
完整代码示例
以下是手动实现 new 操作符的完整代码:

function myNew(constructor, ...args) {
// 创建一个新对象,并将其原型指向构造函数的 prototype
const obj = Object.create(constructor.prototype);
// 调用构造函数,并将 this 绑定到新对象
const result = constructor.apply(obj, args);
// 如果构造函数返回一个对象,则返回该对象;否则返回新对象
return result instanceof Object ? result : obj;
}
使用示例
假设有一个构造函数 Person:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log(`Hello, my name is ${this.name}`);
};
使用自定义的 myNew 创建实例:
const person = myNew(Person, 'Alice', 25);
person.sayHello(); // 输出: Hello, my name is Alice
注意事项
- 如果构造函数返回原始值(如
number、string、boolean等),new操作符会忽略返回值并返回新创建的对象。 - 如果构造函数返回非原始值(如对象、数组、函数等),
new操作符会直接返回该值。
简化版本
如果不需要处理构造函数的返回值,可以简化实现:
function myNewSimple(constructor, ...args) {
const obj = Object.create(constructor.prototype);
constructor.apply(obj, args);
return obj;
}






