参考链接:https://juejin.cn/post/6894401976809816077

前言

new操作符到底有何作用,可以先看一道面试题和参考答案

  1. new操作符作用
  2. 1、创建一个空对象
  3. 2、由this变量引用该对象
  4. 3、该对象继承该函数的原型
  5. 4、把构造函数的属性和方法添加到这个对象中
  6. 5、返回这个新对象

构造函数

构造函数两个特点

  • 大写字母开头(大驼峰命名)
  • new 调用

当一个函数使用new 操作符执行时,它按照以下步骤:
1、一个新的空对象被创建并分配给this
2、函数体执行。通常会修改this,为其添加新的属性
3、返回this的值
所以new User(…)做的就是类似的事情:

  1. function User(name) {
  2. // this = {};(隐式创建)
  3. // 添加属性到 this
  4. this.name = name;
  5. this.isAdmin = false;
  6. // return this;(隐式返回)
  7. }

构造函数的主要目的——实现可重用的对象创建代码。

构造器的return

一般构造函数是没有return 语句的,因为当通过new 调用构造函数创建对象时会隐式返回内部this;
那如果有return语句,就会出现下面了两种情况:

  • 如果return一个对象,则代替this,返回该对象而非this
  • 如果return返回一个原始类型,则忽略掉

这里return一个对象可以覆盖函数内的this

  1. function BigUser() {
  2. this.name = "John";
  3. return { name: "Godzilla" }; // <-- 返回这个对象
  4. }
  5. alert( new BigUser().name ); // Godzilla,得到了那个对象

通常构造器没有 return 语句。这里我们主要为了完整性而提及返回对象的特殊行为。

总结

  • 构造函数就是常规函数,命名要首字母大写
  • 只能使用new来调用。这意味着在开始时创建了空的this,并在最后返回填充了值的this