我尝试使用此语法导入并在ES6中初始化一个类。但控制台说'未定义属性hej'。
Work.js
return
Main.js
class Work {
constructor() {
}
hej() {
alert('hej');
}
}
export default Work;
导致此错误的原因是什么?怎么解决?
答案 0 :(得分:3)
您的Work
函数没有hej
属性。 hej
是new Work
将分配给实例的原型的属性,因此:
const w = new Work();
w.hej();
或者如果您希望将其用作Work.hej();
,请将其设为static
:
class Work {
static hej() {
// ^^^^^^-----------------
alert("hej");
}
}
然后Work.hej()
有效,因为hej
是一种静态方法(Work
的方法,而不是Work
的实例)。< / p>
如果您在最新版本的Chrome上使用this plunkr,则表明它正在运行(使用实例方法)。这是来源:
index.html
:
<!DOCTYPE html>
<html>
<body>
<script type="module" src="work.js"></script>
<script type="module" src="main.js"></script>
</body>
</html>
work.js
:
class Work {
constructor() {
}
hej() {
document.body.appendChild(
document.createTextNode("hej")
);
}
}
export default Work;
main.js
:
import Work from './work.js';
const w = new Work();
w.hej();
如果您在最新版本的Chrome上使用this one,则表明它正在运行(使用静态方法)。这是来源:
index.html
(与上述相同)
work.js
:
class Work {
constructor() {
}
static hej() {
document.body.appendChild(
document.createTextNode("hej")
);
}
}
export default Work;
main.js
:
import Work from './work.js';
Work.hej();
请注意,Chrome中的模块支持非常新,您需要完全保持最新状态(正如我在2017年10月下旬所写的那样)。