JavaScript中执行 new 时,过程中都发生了什么?

576 阅读1分钟

比如要创建一个实例Person,对于js来说,就需要用到new操作符,其实,new的过程中发生了如下过程:

MDN上的解释:

  1. 一个继承自 Person.prototype 的新对象被创建。
  2. 使用指定的参数调用构造函数 Person ,并将 this 绑定到新创建的对象。new Person 等同于 new Person(),也就是没有指定参数列表,Person 不带任何参数调用的情况。
  3. 由构造函数返回的对象就是 new 表达式的结果。如果构造函数没有显式返回一个对象,则使用步骤1创建的对象。(一般情况下,构造函数不返回值,但是用户可以选择主动返回对象,来覆盖正常的对象创建步骤)

用代码简单的来理解就是:

function _new(fn) {
	var obj = {}//创建一个新对象
	obj.__proto__ = fn.prototype // 新对象继承Person.prototype
        fn.call(obj);// 使用指定的参数调用构造函数 Person ,并将 this 绑定到新创建的对象
        return obj   //返回最初创建的对象
}
  1. 创建一个空对象
  2. 新对象继承Person.prototype
  3. 使用指定的参数调用构造函数 Person ,并将 this 绑定到新创建的对象
  4. 返回最初创建的对象