前沿:
原型和原型链是 JavaScript 中最经典的问题之一,而构造函数又是原型和原型链的基础;所以要想真正的了解原型和原型链,我们必须要清楚构造函数以及它的执行过程,这是学习原型和原型链必不可少的知识。
什么是构造函数:
- 在 JavaScript 中,用 new 关键字来调用的函数,称为构造函数;
- 在 JavaScript 中构造函数的函数名一般首字母要大写。
它解决了什么问题:
var p1 = { name: 'zs', age: 6, gender: 'male',}
var p2 = { name: 'ls', age: 5, gender: 'female',}
var p3 = { name: 'ww', age: 6, gender: 'male',}
var p4 = { name: 'zl', age: 7, gender: 'female',}
// ...
- 当我们需要录入一堆数据,如:录入一个班级每个学生的基本信息,每个同学都可以当作一个对象去处理,这样就会出现大量重复性的代码,如果一个班学生很多,这样做就性价比就很低。
使用构造函数去处理这个过程
function Pupil (name, age, gender) {
this.name = name
this.age = age
this.gender = gender
}
const p1 = new Pupil('zs', 6, 'male')
const p2 = new Pupil('ls', 5, 'female')
...
整个构造函数的执行过程:
- 当一个函数创建好以后,即使它的函数名是以大写开头,我们都不能保证它是构造函数;只有当一个函数是以
new
关键字去调用的情况下,才能说它是一个构造函数; - 当以 new 关键字调用时,会创建一个新的内存空间;
- 函数体内部的 this 指向该内存;
- 执行函数体内的代码;
- 返回该中间对象,也就是返回了实例对象。
特殊情况:
function Pupil (name, age, gender) {
this.name = name
this.age = age
this.gender = gender
return [{ name: '123' },{name: '123'}]
}
const p1 = new Pupil('zs', 6, 'male')
console.log(p1) // [{ name: '123' },{name: '123'}]
- 挡在构造函数中return一个复杂数据类型时,则指向这个return出来得对象。