JS构造函数加new与不加new的区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS构造函数加new与不加new的区别?相关的知识,希望对你有一定的参考价值。

参考技术A

要知道这个问题,需要知道new的过程发生了什么?终于在( js高级程序设计第三版)给出了答案:

1.创建一个空对象
2.将这个空对象的原型,指向构造函数的prototype属性,构造函数中的this指向这个空对象
3.开始执行内部的代码。
4.如果该函数没有返回 对象 ,则返回this

对第四点我要补充一点:因为有个关键字大家容易遗漏,就是 对象 这两个字,这意味着如果返回的是基本数据类型,比如:int ,string, 那么使用new 最后返回的还是this,这个对象,而不是基本数据类型,这是一个非常容易被遗漏的地方。

其他例子就不多说了,再补充两点总结:

小结:

1. 没有new的构造函数就是一个普通函数,this指向的window,返回值就是构造函数的返回结果。并且不管return的是基本数据类型还是引用类型,都会原样返回。

2. 有new的构造函数,默认返回this,而this指向实例化的对象。并且如果return的是基本数据类型,那么忽视掉该return值,如果返回的是一个引用类型,那么返回该引用类型。

new一个对象后面加括号与不加括号的区别

new一个对象后面加括号与不加括号的区别

?

加括号与不加的区别

(1)加括号
??? 1. 若括号为空,即无实参项,那么理解为调用默认构造函数;
??? 2. 若括号非空,即有实参项,可以理解为调用重载构造函数,或 复合默认构造函数。

(2)不加括号
  调用默认构造函数,或复合默认构造函数。

默认构造函数 与 复合默认构造函数的区别

默认构造函数:编译器会为每一个类默认提供一个构造函数,称之为默认构造函数。默认构造函数一般参数为空。

复合默认构造函数:一个由用户自定义的所有形式参数都赋有默认值的构造函数,称之为复合默认构造函数。


两者联系

一个类中,若一旦有一个用户自定义构造函数,那么由编译器提供的默认构造函数就不再存在。用户自定义的构造函数为默认构造函数的重载版。

默认构造函数不复存在时,用户必须为这个类再自定义一个复合默认构造函数(选所有自定义构造函数其中之一,把形式参数均赋默认值即可)。

不论自定义构造函数(即构造函数的重载版)有多少个,只允许有一个复合默认构造函数。

以上是关于JS构造函数加new与不加new的区别?的主要内容,如果未能解决你的问题,请参考以下文章

js中new创建对象时带括号和不带括号有啥区别

js调用函数时加括号与不加括号的区别

JS 中函数名后面加与不加括号的区别

构造方法时 加public与不加public的区别问题

js中给函数传参函数时,函数加括号与不加括号的区别

JS中函数名后面的括号加与不加的区别和作用