【发布时间】:2018-01-17 16:58:33
【问题描述】:
我创建了一个类/库。我将新的类语法与构造函数及其方法一起使用,现在呢? 在外部 JS 文件中使用它应该放什么?
我有这样的事情
class LoadBalancer {
constructor() {/*...*/}
method1(...bla) {/*...*/}
}
我应该在顶部放一个use strict 吗?
'use strict';
也许把我的班级放在一个自执行匿名函数中?或者在我的班级名称中使用export?
我见过很多语法如下的 .js 文件:
(function (root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define("EventBus", [], factory);
else if(typeof exports === 'object')
exports["EventBus"] = factory();
else
root["EventBus"] = factory();
})(this, function() { /*....
their functions and libraries declaration goes here
.....*/
return whatEverNewFunc();
});
但我不知道这是什么意思,如果你不使用它们会发生什么或有什么优势,如果我只是将我的 class LoadBalancer {/*...*/}放在 loadBalancer.js 文件中,就是这样。
【问题讨论】:
-
既然您说的是 webWorker,那么您的目标是在浏览器中运行是否正确?将代码封装在 IIFE(立即调用的函数表达式)中的通常点是防止您自己的变量污染全局命名空间并防止与其他变量发生冲突,并保护您自己的顶级变量无法被外部代码访问。在浏览器中,这通常是一件好事。在 node.js 中不需要它,因为模块已经包含在它们自己的函数中。
-
WebWorker 与我的要求无关,我的所有代码都在类声明中,我也要求导出语法。这是我的 js code
-
您要运行的目标平台与发布模块所需的一切有关。这就是我问的原因。对于 node.js,您将作为导出其接口的模块发布。对于没有 ES6 的浏览器,您可能会将其作为脚本发布,并单独包含在内并将其接口添加到全局命名空间,或者您需要 ES6 支持并将其定义为 ES6 模块。您展示的最后一个代码块是关于平台检测的。
标签: javascript ecmascript-6 ecmascript-2016 strict-mode