JavaScript构造函数被new时的过程是怎么样的

141 阅读1分钟

在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的结果返回的就是这个对象