具有ECMAScript 6类的命名空间

cda*_*win 4 javascript namespaces class ecmascript-6

我正在尝试TEST使用ECMAScript 6 在命名空间内定义一个类.使用"旧"Javascript我这样做了

var TEST=TEST || {};
TEST.Test1 = function() {
}
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试以下方式

var TEST=TEST || {};
class TEST.Test2 {

}
Run Code Online (Sandbox Code Playgroud)

但我在TEST和Test2之间的点上得到一个错误

Uncaught SyntaxError: Unexpected token
Run Code Online (Sandbox Code Playgroud)

如果不使用转换器而只使用本机浏览器javascript,那么我正在尝试完成的正确方法是什么?

Fel*_*ing 7

就像函数一样,有类声明类表达式.您可以使用类表达式,并将结果分配给TEST.Test1:

TEST.Test1 = class { // or `TEST.Test1 = class Test1 {`

};
Run Code Online (Sandbox Code Playgroud)

  • 命名类表达式可能更好! (2认同)

Est*_*ask 6

通常这正是 ES6 模块的用途:

export class Test2 { ... }

...

import * as TEST from './test';

new TEST.Test2(...)
Run Code Online (Sandbox Code Playgroud)

对于具有类定义的单个文件,它可以是

const TEST = window.TEST || {};

{
  class Test2 { ... }
  ...

  Object.assign(TEST, { Test2, ... });
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用类表达式(正如已经解释过的另一个答案)。