【问题标题】:Namespaces with ECMAScript 6 classes具有 ECMAScript 6 类的命名空间
【发布时间】:2017-06-03 02:27:39
【问题描述】:

我正在尝试使用 ECMAScript 6 在命名空间 TEST 内定义一个类。使用“旧”Javascript 我做到了这一点

var TEST=TEST || {};
TEST.Test1 = function() {
}

现在我正在尝试以下方法

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

}

但我在 TEST 和 Test2 之间的点上出现错误

Uncaught SyntaxError: Unexpected token

不使用转译器而仅使用本机浏览器 javascript 来完成我想要完成的工作的正确方法是什么?

【问题讨论】:

    标签: javascript class namespaces ecmascript-6


    【解决方案1】:

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

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

    【讨论】:

    • 命名类表达式可能会更好!
    • @lonesomeday:同意。
    • 这是否本质上既是命名空间又是子类?
    • @JacobStamm:这里没有子类化(即class foo extends bar {...}。它只是一个分配给属性的类。我猜TEST 充当命名空间。
    • @vee:是的。根据问题中的示例,假设存在var TEST=TEST || {};。
    【解决方案2】:

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

    export class Test2 { ... }
    
    ...
    
    import * as TEST from './test';
    
    new TEST.Test2(...)
    

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

    const TEST = window.TEST || {};
    
    {
      class Test2 { ... }
      ...
    
      Object.assign(TEST, { Test2, ... });
    }
    

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

    【讨论】:

      猜你喜欢
      • 2011-06-03
      • 2011-12-01
      • 2011-05-29
      • 2013-12-28
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      相关资源
      最近更新 更多