You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在JavaScript中如何在一个类内部定义另一个类?

JavaScript 实现类挂载内部类的方案

你需要的bla.FooBarBaz用法(其中bla为类、FooBarBaz为其内部类)可以通过以下两种方式实现:

方案1:类外挂载静态属性(兼容所有支持ES6的环境)

直接把内部类作为外层类的静态属性挂载即可:

// 定义外层类(如果要使用小写的bla,直接把类名改成bla即可)
class Bla {
  constructor() {
    this.instanceProp = "外层类实例属性";
  }
}

// 挂载内部类到外层类
Bla.FooBarBaz = class {
  constructor() {
    this.innerProp = "内部类实例属性";
  }
  // 内部类自有方法
  innerMethod() {
    console.log("内部类方法执行成功");
  }
}

调用示例:

// 你需要的调用形式
const innerIns = new Bla.FooBarBaz();
innerIns.innerMethod(); // 输出:内部类方法执行成功

// 外层类正常实例化不受影响
const outerIns = new Bla();
console.log(outerIns.instanceProp); // 输出:外层类实例属性

方案2:类内直接定义静态内部类(ES2022+ 支持)

如果运行环境(现代浏览器、Node.js 16+)支持ES2022新特性,可以直接在外层类内部声明静态类,写法更聚合:

class Bla {
  constructor() {
    this.instanceProp = "外层类实例属性";
  }

  // 直接定义静态内部类
  static FooBarBaz = class {
    constructor() {
      this.innerProp = "内部类实例属性";
    }
    innerMethod() {
      console.log("内部类方法执行成功");
    }
  }
}

调用方式和方案1完全一致。

额外说明

如果需要内部类访问外层类的私有静态成员,直接在类内定义的静态内部类天然支持该能力:

class Bla {
  // 外层类私有静态属性
  static #privateStaticVal = "外层私有静态值";

  static FooBarBaz = class {
    getOuterPrivateVal() {
      return Bla.#privateStaticVal;
    }
  }
}

console.log(new Bla.FooBarBaz().getOuterPrivateVal()); // 输出:外层私有静态值

内容的提问来源于stack exchange,提问作者John GradientOS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:45:04