Skip to content

new

仲灏2022-06-06约 1 分钟

new 的过程中做了什么

  1. 一个新对象被创建。它继承自foo.prototype

  2. 构造函数 foo 被执行。执行的时候,相应的传参会被传入,同时上下文(this)

    会被指定为这个新实例。new foo 等同于 new foo(,只能用在不传递任何参数的情况

  3. 如果构造函数返回了一个“对象”,那么这个对象会取代整个new出来的结果。如果构造

    函数没有返回对象,那么new出来的结果为步骤1创建的对象

手动实现new方法

js
var M = function(name) {
	this.name = name
}

const n1 = new N()

const n2 = new2(N)

js
function new2(func) {
  const o = {}
  o.__proto__ = func.prototype
  const k = func.call(o)
  
  // 如果有返回值
  if(typeof k === 'object') {
    return k
  } else {
    return o
  }
}

讨论区

欢迎留下想法与补充