es6 class 本身不直接提供命名空间机制,但可通过模块系统(如 import * as utils)、类名前缀、组合导出和静态属性挂载等方式实现逻辑命名空间,达成功能隔离与语义组织。

ES6 Class 本身不直接提供命名空间(namespace)机制,但可以通过模块系统和类的组织方式,自然形成逻辑上的命名空间结构。
用模块作为命名空间载体
ES6 模块天然支持命名空间语义:每个模块文件就是一个独立作用域,导出的内容可被统一导入并挂载到一个对象下。
- 创建一个模块文件(如 utils.js),集中导出多个相关类或工具:
export class Validator { /* ... */ }
export const DEFAULT_TIMEOUT = 5000;
- 在使用处通过 import * as Utils 整体导入,就形成了 Utils 这个命名空间:
const client = new Utils.ApiClient();
console.log(Utils.DEFAULT_TIMEOUT);
这种方式清晰隔离功能域,避免全局污染,也便于 Tree Shaking(前提是不用 import * 全量引入非必要内容)。
用类名前缀模拟命名空间
当无法或不便拆分模块时,可通过 PascalCase 类名的层级前缀体现归属关系,这是一种约定式命名空间。
- 例如:UserAuthManager、UserProfileService、PaymentGatewayClient
- 前缀 User 和 Payment 表示业务域,帮助开发者快速识别职责边界
- 注意:这只是语义分组,不提供运行时隔离,仍需配合模块划分才能真正避免冲突
组合导出构建聚合命名空间
可在顶层模块中汇总多个子模块的导出,对外暴露统一入口,类似“命名空间包”。
// index.jsexport { default as Button } from './ui/Button.js';
export { default as Modal } from './ui/Modal.js';
export { ApiClient, Validator } from './core/utils.js';
使用者只需导入 import * as UI from './index.js',就能获得结构化的 UI.Button、UI.Modal 等访问路径。
静态属性与嵌套类辅助组织
虽然 ES6 不支持真正的嵌套类语法,但可通过静态属性挂载关联类,增强语义聚合:
class User {static Profile = class {
constructor(userId) { this.userId = userId; }
}
static Role = class { /* ... */ };
}
// 使用
const profile = new User.Profile(123);
这种写法适合强耦合、生命周期一致的小型辅助类,但不宜过度嵌套,否则影响可测试性和复用性。











