new 操作符
new 的作用#
一般的构造函数#
看个简单的例子
得到结论:
- 通过 new 创建的实例可以访问到构造函数中的属性;
- 通过 new 创建的实例可以访问到构造函数原型链中的属性,即通过 new 将实例与构造函数在原型链上建立了连接。
特殊的构造函数#
一般情况下,构造函数是没有返回值,下面探讨构造函数有返回值的情况:
基本类型#
得到结论:
- 构造函数如果返回基本类型值,那么这个返回值会被忽略
引用类型#
得到结论:
- 构造函数如果返回引用类型值,那么这个返回值会被正常使用
null#
得到结论:
- 构造函数如果返回 null,那么这个返回值会被忽略
小结#
new 的作用如下:
- 通过 new 创建的实例可以访问到构造函数中的属性;
- 通过 new 创建的实例可以访问到构造函数原型链中的属性,即通过 new 将实例与构造函数在原型链上建立了连接;
- 当构造函数返回基本类型值或 null 时,可忽略返回值,但是若返回的为引用类型值,则需将其正常返回,且此时通过 new 创建的实例不可访问到构造函数原型链中的属性。
new 的实现#
1、定义函数:接受不定量的参数,第一个参数为构造函数,接下来的参数被构造函数使用;
2、创建空对象 obj;
3、通过 setPrototypeOf 将 obj 与构造函数原型建立连接,等同于 obj.__proto__ = Con.prototype;
4、将 obj 绑定到构造函数上,并且传入剩余的参数;
5、判断构造函数返回值类型,如果为引用类型就使用构造函数返回的值,否则使用 obj。
知乎上有个有意思的文章可以参考阅读下