new的实现

使用 new 命令调用函数的解析过程如下:

  • 当使用 new 命令调用函数时,先创建一个空对象,作为实例返回。
  • 设置实例的原型,指向构造函数的 prototype 属性。
  • 设置构造函数体内的 this 值,让它指向实例。
  • 开始执行构造函数内部的代码。
  • 如果构造函数内部有 return 语句,而且 return 后面跟着一个对象,会返回 return 语句指定的对象;否则会忽略 return 返回值,直接返回 this 对象。

new过程的代码实现:

function Foo(e) {
    this.name = 'wn';
    this.age = age;
}

function objectFactory() {
    const obj = {}
    // 将参数中的第一个移出
    const Constructor = [].shift.call(arguments)

    obj._proto_ = Constructor.prototype
    const ret = Constructor.apply(obj, arguments)

    return typeof ret === 'object'? ret : obj

}
posted @ 2021-03-16 13:06  Hhhighway  阅读(162)  评论(0编辑  收藏  举报