【发布时间】:2017-11-13 09:50:06
【问题描述】:
我正在使用纯 JavaScript 并尝试利用作为 ECMA-2015(ECMA v6) 版本的一部分出现的类和模块导入/导出的概念。
请看下面的代码sn-p:
rectangle.js 文件-
export default class Rectangle{
constructor(height, width) {
this.height = height;
this.width = width;
}
}
myHifiRectangle.js文件-
import Rectangle from 'rectangle.js';
class MyHiFiRectangle extends Rectangle {
constructor(height, width) {
super(height,width);
this.foo= "bar";
}
}
我正在尝试在 HTML 网页 test.html 中使用上述 *.js 文件,如下所示:
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<title>Javascipt by Rasik Bihari Tiwari</title>
<script src="Scripts/rectangle.js"></script>
<script src="Scripts/myHiFiRectangle.js"></script>
<script type="text/javascript">
var v = new MyHiFiRectangle(2,4);
console.debug(v.foo);
</script>
</head>
<body >
</body>
</html>
现在我尝试在几个浏览器中浏览test.html文件,结果如下:
在谷歌浏览器上我得到以下错误:
Uncaught SyntaxError: Unexpected token export
在 Mozilla firefox 上出现以下错误:
SyntaxError: 出口声明只能出现在顶层 模块
SyntaxError:导入声明只能出现在顶层 一个模块
ReferenceError: MyHiFiRectangle 未定义[了解更多]
我尝试重新排序 HTML 文件的 head 标记中引用的 JS 文件,但没有任何区别。
P.S.我没有使用像 Babel 这样的转译器。我正在尝试查看 JS(ECMA-2015 版本)中对“类”和模块导出/导入构造的本机支持的工作原理以及它是如何工作的。
【问题讨论】:
-
我已经发布了您的问题的答案。
-
删除
<script src="Scripts/rectangle.js"></script>并将<script src="Scripts/myHiFiRectangle.js"></script>替换为<script src="Scripts/myHiFiRectangle.js" type="module"></script>。这解决了一个问题。另一个是myHifiRectangle.js不会创建全局变量(无论如何您都应该停止使用)。为此,请在myHifiRectangle.js末尾添加window.MyHiFiRectangle = MyHiFiRectangle;。
标签: javascript html ecmascript-6