javascript - 从浏览器控制台 JS 调用类(在模块中定义)时,'Uncaught ReferenceError : . .. 未定义'

标签 javascript es6-modules

我有一个文件class.js

            //implementation details
            const _stackCollection = new WeakMap();


            //interface
            export class Stack {

                constructor() {
                    _stackCollection.set(this, []);
                }

                get count() {
                    return _stackCollection.get(this).length;
                }

                pop() {
                    if (this.count === 0)
                        throw new Error('Nothing to pop');

                    return _stackCollection.get(this).pop();
                }

                peek() {
                    if (this.count === 0)
                        throw new Error('Nothing to peek');

                    return _stackCollection.get(this)[this.count - 1];
                }

                push(e) {
                    _stackCollection.get(this).push(e);
                    return;
                }

            }

导入给定类的模块如下所示 模块.js:

   import {Stack} from './class.js';

index.html 看起来像这样:

    <!DOCTYPE html>
    <html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>

    <body>

        <h1>hello world</h1>


    <script type="module" src='module.js'></script>


    </body>
    </html>

当我尝试在控制台中初始化 Stack 实例时,出现以下错误。关于给定的错误有很多问题,但我看不出有什么可以帮助我的:

    const stack=new Stack()

    Uncaught ReferenceError: Stack is not defined
    at <anonymous>:1:13

最佳答案

模块中的声明仅限于该模块。如果要访问它们,则需要导入它们。

要在浏览器控制台中使用这样的导出,您需要将其导入或将其绑定(bind)到全局变量。

全局(请注意,这违背了模块的目的,只能用于临时测试)

export class A {}

// TODO: remove this
window.A = A;

使用建议的动态导入语法:

// browser console:
  import('./a.js').then(console.log);

使用 SystemJS

// browser console:
SystemJS.import('./a.js').then(console.log);

关于javascript - 从浏览器控制台 JS 调用类(在模块中定义)时,'Uncaught ReferenceError : . .. 未定义',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51986073/

相关文章:

javascript - 如何获取声明新对象的变量的名称

javascript - 需要学习高级 Javascript 概念的指导

javascript - Framework7 slider 范围在 google chrome 浏览器中不起作用

javascript - Webpack 更改窗口全局对象范围

javascript - ES6 jsdom无法读取null的属性 'innerHTML'

javascript - 我需要使用 onLoad 来启动我的 webpack 捆绑代码吗?

javascript - 将 ng-change 应用到 &lt;input type ="file"..>,它已经使用了它自己的指令

php - 脚本语言中的美元表示法 - 为什么?

javascript - 我应该避免在模块中使用顶级变量吗?

javascript - 无法加载类型为 "module"的脚本