比如要创建一个实例Person,对于js来说,就需要用到new操作符,其实,new的过程中发生了如下过程:
MDN上的解释:
- 一个继承自 Person.prototype 的新对象被创建。
- 使用指定的参数调用构造函数 Person ,并将 this 绑定到新创建的对象。new Person 等同于 new Person(),也就是没有指定参数列表,Person 不带任何参数调用的情况。
- 由构造函数返回的对象就是 new 表达式的结果。如果构造函数没有显式返回一个对象,则使用步骤1创建的对象。(一般情况下,构造函数不返回值,但是用户可以选择主动返回对象,来覆盖正常的对象创建步骤)
用代码简单的来理解就是:
function _new(fn) {
var obj = {}//创建一个新对象
obj.__proto__ = fn.prototype // 新对象继承Person.prototype
fn.call(obj);// 使用指定的参数调用构造函数 Person ,并将 this 绑定到新创建的对象
return obj //返回最初创建的对象
}
- 创建一个空对象
- 新对象继承Person.prototype
- 使用指定的参数调用构造函数 Person ,并将 this 绑定到新创建的对象
- 返回最初创建的对象