构造函数

构造函数就是用于创建对象的函数。用函数创建对象,可以减少繁琐的对象创建流程。

构造函数的调用:new <构造函数名>(...);

  • 构造函数的其他特点

函数名通常使用大驼峰命名法。构造函数的命名尽量不要出现 v.(动词),因为关键字 new 表示“创建”,已经有一个动词了。

示例:

  1. // 比如要定义一个用于创建用户对象的构造函数
  2. function User() { // 不要命名为:CreateUser
  3. // => ...
  4. }
  5. const user_a = new User();
  6. // => ...

构造函数的返回值是一个对象。

  • 构造函数的内部原理

构造函数内部,会自动创建一个新对象,this 指向新创建的对象,并且自动返回新对象。

  1. function User() {
  2. // this = {}
  3. // this.xxx = xxx;
  4. // => ...
  5. // return this;
  6. }

构造函数和普通函数,其实没有啥本质上的却别,它们的区别在于调用方式上,我们在调用一个构造函数的时候,通常会在调用时,加上关键字 new。

一旦我们在调用一个函数时,加上了关键字 new,那么,我们可以简单的理解为,在调用该函数时,它自动地在函数的最前面加上了一行 this = {};,并在函数的最后一行加上了 return this;。虽然这么理解并不准确,因为关键字 this 是无法被赋值的,但是,这么理解更直观。

  • 细节问题

构造函数中如果出现返回值,如果返回的是原始类型,则直接忽略;如果返回的是引用类型,则使用返回的结果。

所有的对象,最终其实都是通过构造函数创建的。

如何判断函数是正常调用还是通过关键字 new 来调用

  • new.target

该表达式在函数中使用,返回的是当前的构造函数。但是,如果该函数不是通过关键字 new 调用的话,则返回 undefined。

通常用于判断某个函数是否是通过 new 在调用。