构造函数,是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载。
构造函数有回滚的效果,构造函数抛出异常时,构造的是一个不完整对象,会回滚,将此不完整对象的成员释放(C++)
构造函数
ECMAScript中,构造函数与其他函数的唯一区别,就在于调用它们的方式不同。不过,构造函数毕竟也是函数,不存在定义构造函数的特殊语法。任何函数,只要通过new操作符来调用,那它就可以作为构造函数,如果不通过new操作符来调用,那它跟普通函数也不会有什么两样。
ECMAScript中的构造函数可以分为原生构造函数和自定义构造函数。原生构造函数有Object、Array、Date…,在运行时会自动出现在执行环境中。此外,也可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法。
按照惯例,构造函数始终都应该以一个大写字母开头,而非构造函数则应该以一个小写字母开头。
构造函数本身也是函数,只不过可以用来创建对象而已。
functionPerson(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.printName=function(){
console.log(this.name);
}
}
varperson=newPerson('Nicholas',29,'SoftwareEngineer');
使用new操作符来调用构造函数,会经历以下4个步骤:
①创建一个新对象
②将构造函数的作用域赋值给新对象(因此this就指向了这个新对象)
③执行构造函数中的代码(为这个新对象添加属性)
④返回新对象
构造函数的命名必须和类名完全相同。在java中普通函数可以和构造函数同名,但是必须带有返回值;
构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的;
构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;