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的区别?的主要内容,如果未能解决你的问题,请参考以下文章