new 操作符具体干了什么呢?如何实现?

59 阅读1分钟
  • 创建一个空对象
  • 设置原型,将对象的原型设置为构造函数的prototype
  • 将this指向新对象并执行构造函数
  • 判断构造函数返回的值的类型 如果是引用类型则直接返回这个引用类型 如果是值则返回新对象
function myNew(Ctor, ...params) {
    let obj = Object.create(Ctor.prototype); 
    // Object.create(A):创建一个空的对象并把A作为新对象的原型(新对象.__proto__ === A); A只能是null或者是对象类型
    let result = Ctor.call(obj, ...params);
    if (result && (typeof result === "object" || typeof result === "function")) {
        return result
    }
    return obj;
}