Javascript 中 new 关键字作用

74 阅读1分钟

new 的作用

  1. 创建一个新的空对象
  2. 将构造函数的原型(prototype)赋值给这个空对象的__proto__属性
  3. 将构造函数中的this指向这个空对象
  4. 判断构造函数返回值是否为引用对象,如果有返回值且为引用对象,则返回这个引用对象(即 new 关键字无效),如果没有返回值或者返回值为基本类型,则返回这个创建的新对象。

new 的实现

function fakeNew(ConFun, ...args) {
  let o = {};
  // o.__proto__ = ConFun.prototype;
  Object.setPrototypeOf(o, ConFun.prototype);
  // o = this
  let res = ConFun.apply(o, args);
  return res instanceof Object ? res : o;
}