new操作符的作用
- new操作符会返回一个对象,所以我们需要在内部创建一个对象。
- 这个对象,也就是构造函数中的this,可以访问挂载到this上的任意属性。
- 这个对象可以访问构造函数原型上的属性,所以需要将对象与构造函数联系起来。
- 返回原始值需要忽略,返回对象需要正常处理。
手动实现new操作符
1 | function create(Con, ...args) { |
实现过程解析
- 函数接收不定量参数,第一个参数为构造函数,接下来的参数被构造函数使用。
- 内部创建一个空对象obj。
- 通过setPrototypeOf使对象obj访问到构造函数原型链上的属性,等同于
obj.__proto__ = Con.prototype
。 - 将obj绑定到构造函数上,并传入剩余参数。
- 判断构造函数返回值是否为对象,如果为对象就使用构造函数返回的值,否则使用obj,这样就实现了忽略构造函数返回的原始值。