手写代码
手写 new 操作符
new 操作符在 JavaScript 中用于创建一个用户定义的对象类型的实例。它的工作步骤如下:
- 首先创建了一个新的空对象
- 设置原型,将对象的原型设置为函数的
prototype
对象。 - 让函数的
this
指向这个对象,执行构造函数的代码(为这个新对象添加属性) - 判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。
javascript
function myNew(obj, ...args) {
// 1. 创建一个新的空对象
// 2. 将这个新对象的原型指向构造函数的 prototype 属性
const newObject = Object.create(obj.prototype)
// 3. 将构造函数内部的 this 绑定到这个新对象上,并执行构造函数的代码
const result = obj.apply(newObject, args);
// 4. 如果构造函数返回一个对象,则返回该对象;否则,返回新创建的对象
return result instanceof Object ? result : obj;
}