ES6 标准引入了类class的概念,常常被用于创建一个对象。类中有个特殊的方法constructor,它的返回值有一些让人迷惑的地方。
先简单梳理一下使用关键词 new 创建一个对象时发生了什么:
- 创建一个空对象
- 将 this 指向该对象,然后执行
constructor函数中的代码,将一些数据通过 this 赋值给对象 - 返回 this
默认情况下,constructor方法返回this,所以说下面某行代码return this是没必要写上去的。
javascript
class MyClass {
constructor() {
this.val = 10;
return this;
}
}
new MyClass(); // {val: 10}但是,如果手动地在constructor方法中返回一个合理的值,比如一个对象{name:"js"},那么constructor方法将返回{name:"js"}:
javascript
class MyClass {
constructor() {
this.val = 10;
return { name: "js" };
}
}
new MyClass(); // {name: "js"}如果手动地返回一个看似不合理的值,例如 2,那么constructor方法仍然返回 this:
javascript
class MyClass {
constructor() {
this.val = 10;
return 2;
}
}
new MyClass(); // {val: 10}- 合理的值:
null、数组、对象(引用类型) - 不合理的值:字符串、数字、
undefined(基本类型)