JS - 原型及原型链

62 阅读1分钟

new 操作符

规范定义 new 操作符如下:

  1. 创建一个空白且简单的对象 newInstance
  2. newInstance 的 [[Prototype]] 指向构造函数的 prototype 属性
  3. 执行构造函数,将 newInstance 绑定为 this 上下文
  4. 如果构造函数返回非原始值, 那么返回该值作为结果,否则返回 newInstance

代码分析

function Test() {
    this.a = "a";
}
Test.prototype.b = "b";

const test = new Test();

原型链:

test —— __proto__ ——> Test.prototype —— __proto__ ——> Object.prototype —— __proto__ ——> null

new 代码模拟

function mockNew(constructorFn, ...args) {
    const newInstance = Object.create(constructorFn.prototype);
    const ret = constructorFn.apply(newInstance, args);
    return typeof ret === 'object' && ret !== null ? ret : newInstance;
}

参考