ES6中的Javascript类,如何在其他js文件和html文件中导入它们?
很明显,我是一个初学者,正在尝试了解基本的工作人员,所以请容忍我 我将所有这些文件(index.html、app.js和calc.js)放在同一个文件夹中,它们的内容如下所示 我有两个问题: 1:为什么在文件(app.js)中,导入类Calc并创建它的新实例是有效的,而在文件(Calc.js)中,类似的过程不适用于类测试 2:如何在*.html文件中使用类“Calc” 注意:我在MacOS10.13上使用的是chrome(62.0.3202.94(官方版本)(64位))ES6中的Javascript类,如何在其他js文件和html文件中导入它们?,javascript,html,class,oop,ecmascript-6,Javascript,Html,Class,Oop,Ecmascript 6,很明显,我是一个初学者,正在尝试了解基本的工作人员,所以请容忍我 我将所有这些文件(index.html、app.js和calc.js)放在同一个文件夹中,它们的内容如下所示 我有两个问题: 1:为什么在文件(app.js)中,导入类Calc并创建它的新实例是有效的,而在文件(Calc.js)中,类似的过程不适用于类测试 2:如何在*.html文件中使用类“Calc” 注意:我在MacOS10.13上使用的是chrome(62.0.3202.94(官方版本)(64位)) // app.js im
// app.js
import { Calc } from './calc.js';
class Test {
static hello() {
console.log("hello from class1");
}
}
let c = new Calc(); // this works!
console.log(c.sum(2, 3) + 1); // 6
export { Test };
及
最后是HTML文件:
<html>
<head>
<meta charset="utf-8" />
<script src="./app.js" type="module"></script>
<script src="./calc.js" type="module"></script>
</head>
<body>
<h1>ES6</h1>
<script>
let c = new Calc();
// simulate input summation from two textboxes for example
console.log(c.sum(2, 1)); //Uncaught ReferenceError: Calc is not defined
</script>
</body>
</html>
ES6
设c=新计算();
//例如,模拟来自两个文本框的输入总和
console.log(c.sum(2,1))//未捕获引用错误:未定义计算
问题1:
您有一个循环依赖项-app.js
importscalc.js
,但是calc.js
importsapp.js
通常,模块系统将确保在模块本身之前执行模块的所有依赖项,但当依赖项树有周期时,这是不可能的——它必须首先选择其中一个周期来运行。在本例中,首先运行calc.js
,此时尚未定义Test
如果你很小心的话,有很多方法可以解决这个问题,但是循环依赖性几乎总是你构造代码错误的标志——最好的解决方案是重新组织它,这样你就不再有循环了
问题2:
ES2016模块不在全局范围内执行。如果要使某个内容作为一个整体对窗口可用,则需要明确:
window.Calc = Calc;
问题1: 您有一个循环依赖项-
app.js
importscalc.js
,但是calc.js
importsapp.js
通常,模块系统将确保在模块本身之前执行模块的所有依赖项,但当依赖项树有周期时,这是不可能的——它必须首先选择其中一个周期来运行。在本例中,首先运行calc.js
,此时尚未定义Test
如果你很小心的话,有很多方法可以解决这个问题,但是循环依赖性几乎总是你构造代码错误的标志——最好的解决方案是重新组织它,这样你就不再有循环了
问题2:
ES2016模块不在全局范围内执行。如果要使某个内容作为一个整体对窗口可用,则需要明确:
window.Calc = Calc;
非常感谢你。问题1完美地解决了。然而,在Problem2中,我仍然得到了
未捕获引用错误:Calc未定义
,尽管我在标题
中添加了脚本。换句话说,我不能添加属性window.Calc
,因为类Calc没有定义!您将窗口放在哪里。Calc=Calc
?它需要在您的一个模块中,而不是在HTML中。谢谢:)这解决了剩余的问题:D@user2804070:Brilliant:)我建议您将所有代码保留在模块中,而不是尽可能将部分代码保留在HTML中,因为这会让事情变得更干净-尽管有时您没有选择,所以知道如何解决这个问题很好。非常感谢。问题1完美地解决了。然而,在Problem2中,我仍然得到了未捕获引用错误:Calc未定义
,尽管我在标题
中添加了脚本。换句话说,我不能添加属性window.Calc
,因为类Calc没有定义!您将窗口放在哪里。Calc=Calc
?它需要在您的一个模块中,而不是在HTML中。谢谢:)这解决了剩余的问题:D@user2804070:Brilliant:)我建议您将所有代码保留在模块中,而不是尽可能将部分代码保留在HTML中,因为这会让事情变得更干净-尽管有时您没有选择,所以知道如何解决这个问题很好。