原型链

JavaScript 中所有的对象都有一个内置属性,称为它的 prototype(原型)。它本身是一个对象,故原型对象也会有它自己的原型,逐渐构成了原型链。原型链终止于拥有 null 作为其原型的对象上

new 与原型链

new 都做了哪些事:

  • 创建一个新的对象

  • 继承父类原型上的方法.

  • 添加父类的属性到新的对象上并初始化. 保存方法的执行结果.

  • 如果执行结果有返回值并且是一个对象, 返回执行的结果, 否则, 返回新创建的对象。

function _new(obj, ...rest){
  // 基于obj的原型创建一个新的对象
  const newObj = Object.create(obj.prototype);

  // 将newObj作为函数内部的this上下文,并将rest数组中的元素作为参数传递给这个函数, 并获取obj函数执行的结果
  const result = obj.apply(newObj, rest);

  // 如果执行结果有返回值并且是一个对象, 返回执行的结果, 否则, 返回新创建的对象
  return typeof result === 'object' ? result : newObj;
}

this 与原型链

Last updated