JavaScript中new一个对象发生了什么

new的过程

创建一个空的简单JavaScript对象(即{});
链接该对象(即设置该对象的构造函数)到另一个对象 ;
将步骤1新创建的对象作为this的上下文 ;
如果该函数返回值是对象类型则返回对象,没有返回对象就返回创建的对象

function myNew (myConstructor, ...args) {
  const obj = Object.create(myConstructor.prototype)
  const result = myConstructor.apply(obj, args)
  // 这是一个标准的 (result && typeof result === 'object')  判断是非null的对象的写法
  // 如果 result是对象就返回对象,如果不是就返回创建的obj 这是一个关键
  if (result && typeof result === 'object') return result
  return obj
}

参考

Mark24

Everything can Mix.