TypeError: derived class constructor returned invalid value x

当派生类构造函数返回一个不是对象或 undefined 的值时,会发生 JavaScript 异常“派生类构造函数返回无效值 x”。

消息

TypeError: Derived constructors may only return object or undefined (V8-based)
TypeError: derived class constructor returned invalid value 1 (Firefox)
TypeError: Cannot return a non-object type in the constructor of a derived class. (Safari)

错误类型

TypeError

哪里出错了?

通常,构造函数不需要返回任何东西——当类被构造时,this 的值会自动返回。构造函数也可以返回一个对象,并且这个对象将覆盖 this 作为新构造的实例。然而,返回既不是对象也不是 undefined 的东西通常是一个错误,因为该值会被忽略。在基类和函数构造函数(使用 function 语法)中,返回此类值会被静默忽略,而在派生类中,它会抛出错误。

示例

无效案例

js
class Base {
  constructor() {}
}

class Derived extends Base {
  constructor() {
    return 2;
  }
}

new Derived(); // TypeError: derived class constructor returned invalid value 2

有效情况

js
class Base {
  constructor() {}
}

class Derived extends Base {
  constructor() {
    return { x: 1 };
  }
}

new Derived(); // { x: 1 }

另见