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
。
知乎上有个有意思的文章可以参考阅读下