在es6出来之前,JavaScript中想要实现类和继承,基本都是以构造函数的形成实现的,那么当new一个构造函数时都经历了哪些过程呢?
先上一段代码
function Person(name, age, sex) {
this.name = name
this.age = age
this.sex = sex
this.showName = function() {
return this.name
}
}
Person.prototype.showAge = function() {
return this.age
}
const person = new Person('zhangsan', 30, '男') // 实例化
person.name // zhangsan
person.showName() // zhangsan
person.sex // 男
person.age // 30
以上代码为创建构造函数以及实例化的过程,其大致可以分为如下步骤:
创建一个空对象(obj),把this指向该对象
把该对象的原型属性指向构造函数的原型,实现继承 obj.__proto__ === Person.prototype,这样实例化的对象就可以使用构造函数原型上面的属性和方法
执行函数内语句,通过this添加属性和方法
最后默认返回该对象
如果在构造函数内手动的return语句,有两种情况,如果返回的不是一个对象,其结果会被忽略,最终还是会返回创建的那个对象,如果是return返回一个对象,那么new的结果返回的就是这个对象