constructor方法返回什么?

ES6标准引入了类class的概念,常常被用于创建一个对象。类中有个特殊的方法constructor,它的返回值有一些让人迷惑的地方。

先简单梳理一下使用关键词new创建一个对象时发生了什么:

  1. 创建一个空对象
  2. 将this指向该对象,然后执行constructor函数中的代码,将一些数据通过this赋值给对象
  3. 返回this

默认情况下,constructor方法返回this,所以说下面某行代码return this是没必要写上去的。

1
2
3
4
5
6
7
class MyClass{
constructor(){
this.val = 10;
return this;
}
}
new MyClass(); // {val: 10}

但是,如果手动地在constructor方法中返回一个合理的值,比如一个对象{name:"js"},那么constructor方法将返回{name:"js"}:

1
2
3
4
5
6
7
class MyClass{
constructor(){
this.val = 10;
return {name: "js"};
}
}
new MyClass(); // {name: "js"}

如果手动地返回一个看似不合理的值,例如2,那么constructor方法仍然返回this:

1
2
3
4
5
6
7
class MyClass{
constructor(){
this.val = 10;
return 2;
}
}
new MyClass(); // {val: 10}

合理的值包括:null、数组、对象
不合理的值包括:字符串、数字、undefined

优惠福利

江山父老能容我,不使人间造孽钱