构造函数
在JavaScript中,通过new来实例化对象的函数叫构造函数(函数没有通过new实例化对象,这个函数就是普通函数),也就是初始化一个实例对象,对象的prototype属性
是继承一个实例对象。构造函数的命名一般会首字母大写
为什么需要使用构造函数?
是为了创建对象
JavaScript中创建对象有两种,一种是构建函数+prototype,另一种是用class。.这里我们不去讲解class,先放到
构造函数上。
1 | //当我们需要创建比较多信息时 |
那么如果需要创建很多呢?需要这样一个一个的写下去吗?但是实际上可以通过下面的形式来实现
1 | function Person(name,age,gender,classRoom){ |
构造函数的执行过程
构造函数的执行过程其实也就是new操作符的基本过程
- 创建一个新的对象,并且在内存中创建一个新的地址。//let person1=0:
- 继承原型//person1.proto=Person.prototype
- 改变构造函数的this指向,并且新对象添加构造函数的属性和方法/执行Person函数,将name,age,sex参数传
入Person中执行,此时函数内部this为new创建的person1对象,所以person1.name=’a’;person1.age=l8;
person1.gender=-‘男’; - 根据构建函数返回类型作判断,如果是原始值则被忽略,如果是返回对象,需要正常处理new操作符通过构造函数创建的实例,可以访问构造函数的属性和方法,同时实例与构造函数通过原型链连接起来了。
构造函数的返回值
构造函数中,不要显示返回任何值
1 | //返回原始值 |
可以看到当返回原始值的时候,并不会正常返回这个原始值“啦啦啦啦”,而当返回直是对象的时候,这个返回值能
被正常返回,但是这时候new就不生效了。所以,构造函数尽量不要返回值。因为返回原始值不会生效,返回对象
会导致new操作符没有作用。
那么为什么会这样呢?
构造函数没有返回值的原因是因为它不是由你的代码直接调用的,它是由运行时的内存分配和对象初始化代码
调用的。它的返回值(如果它在编译为机器代码时实际上有一个)对用户来说是不透明的一因此,你不能指
定它。
其实在JavaScript中,
- let a=0也就是let a=new Array[];
- function a(){}也就是let a=new Function(){}