导入类失败,使用ES6语法

时间:2017-10-23 13:56:49

标签: javascript ecmascript-6

我尝试使用此语法导入并在ES6中初始化一个类。但控制台说'未定义属性hej'。

Work.js

return

Main.js

class Work {

    constructor() {

    }

    hej() {
        alert('hej');
    }
}

export default Work;

导致此错误的原因是什么?怎么解决?

1 个答案:

答案 0 :(得分:3)

您的Work函数没有hej属性。 hejnew 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月下旬所写的那样)。