贝利信息

javascript继承如何实现_extends关键字怎么使用?

日期:2026-01-06 00:00 / 作者:幻影之瞳
JavaScript 没有 _extends 关键字,正确语法是 extends(无下划线),必须配合 class 和 super() 使用;手动写 _extends 无效且易引发错误。

JavaScript 没有 _extends 关键字,这是常见误解。ES6 的继承用的是 extends(不带下划线),且必须配合 classsuper() 使用;直接写 _extends 会报 ReferenceError 或静默失败。

class extends 是唯一标准语法

ES6 规范只定义了 extends 作为类继承的关键字,它只能出现在 class 声明中,后面必须跟一个构造函数或另一个类(包括 null,但极少用)。

class Animal {
  constructor(name) {
    this.name = name;
  }
  speak() {
    return `${this.name} makes a sound`;
  }
}

class Dog extends Animal { // ✅ 正确:extends + class
  constructor(name, breed) {
    super(name); // ✅ 必须先调用
    this.breed = breed;
  }
  bark() {
    return `${this.name} barks`;
  }
}

为什么有人写 _extends?可能是混淆了 Babel 编译产物

Babel 将 class extends 编译为 ES5 时,会生成一个叫 _inherits 的辅助函数(注意是 _inherits,不是 _extends),内部用 Object.setPrototypeOfObject.create 模拟原型链继承。这个函数名是 Babel 内部实现细节,开发者不应直接使用或依赖。

想兼容老环境?别碰 _extends,用标准写法 + 正确配置

如果目标环境不支持 class(如 IE11),正确做法是让构建工具(Vite、Webpack、Babel)自动转换,而不是手写“模拟继承”代码。

真正要注意的是:子类构造函数里漏掉 super()、父类没有构造函数却传参、或者用箭头函数覆盖了 super() 调用——这些才是实际开发中最常卡住的地方。