js new实现
new 操作符的实现原理
在 JavaScript 中,new 操作符用于创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型的实例。new 操作符主要执行以下步骤:

创建一个空的简单 JavaScript 对象(即 {})
将新对象的 __proto__ 属性指向构造函数的 prototype 属性
将构造函数中的 this 绑定到新创建的对象
执行构造函数中的代码
如果构造函数返回非原始值,则返回该值;否则返回新创建的对象

手动实现 new 操作符
可以通过以下代码手动实现 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
}
使用示例
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.sayHello = function() {
console.log(`Hello, my name is ${this.name}`)
}
// 使用原生 new
const p1 = new Person('Alice', 25)
p1.sayHello() // 输出: Hello, my name is Alice
// 使用自定义 myNew
const p2 = myNew(Person, 'Bob', 30)
p2.sayHello() // 输出: Hello, my name is Bob
特殊情况处理
如果构造函数返回一个对象,则 new 操作符会返回该对象而不是新创建的对象实例:
function Car(model) {
this.model = model
return { custom: true } // 返回一个对象
}
const c = new Car('Tesla')
console.log(c) // 输出: { custom: true }
console.log(c instanceof Car) // 输出: false
注意事项
手动实现的 myNew 函数与原生 new 操作符在功能上基本一致
Object.create() 用于正确设置原型链
apply 方法用于将构造函数中的 this 指向新对象
需要检查构造函数的返回值是否为对象类型






