无法从浏览器控制台访问任何对象或功能,但一切都按预期进行?
Unable to access any objects or functions from within the browser console, yet everything works as intended?
我正在使用带有一堆静态成员的“类”来使我的非常专业的代码在一定程度上组织起来。像这样:
index.html
<script type="module" src="client/js/main.js"></script>
main.js
import { UINav, UIDimension } from "./interface.js";
import { Dimension } from "./dimension.js";
import { InputFlex } from "./input.js";
function main() {
Dimension.init();
UIDimension.init();
UINav.init();
InputFlex.start();
}
我的问题:例如,当我想从浏览器控制台内部检查内容时,为什么我得到 Uncaught ReferenceError: InputFlex is not defined
,但导入的所有方法都按预期执行?如何从浏览器中找到我心爱的“类”?
我也在使用 TypeScript,但我怀疑这是否重要?
编辑:文件是从本地主机服务器获取的。
编辑:在我的环境中似乎存在一个普遍的问题,我什至无法在浏览器控制台中找到 main() 函数。 我是 运行 deno 服务器。这可能是我这个有趣问题的根源吗?
我能够从 js 文件中记录内容,但不能从浏览器控制台中记录内容,我被告知一切都未定义,但显然这些实体存在于某处,因为一切都按预期工作。
编辑:@iamimran input.js 就是这样:
export class InputFlex {
static myMember123 = {...};
static start() {...}
(...)
}
模块有自己的作用域。在其中声明的变量不是全局的。
这是好事:全局变量会导致冲突,使维护和调试更加困难。
如果您想从开发人员工具控制台访问它们,那么您需要将控制台移动到模块的范围内,例如通过在那里设置断点。
您的 import
显示您正在使用 ECMAScript modules。
使用模块背后的一个主要动机是不污染全局名称 space,这意味着模块中定义的任何变量都是该模块私有的,而不是全局的。这叫做封装.
如果您希望模块中的任何内容成为全局变量,您需要明确地将其“发布”到全局对象上:
import { UINav, UIDimension } from "./interface.js";
import { Dimension } from "./dimension.js";
import { InputFlex } from "./input.js";
// to "publish":
Object.assign(globalThis, { UINav, UIDimension, Dimension, InputFlex });
// ...
请记住,这有潜在的危险,因为上面对 Object.assign
的调用会有效地覆盖任何可能已经存在的全局变量(您要使用全局名称 space 的众多原因之一尽可能少,最好一点也不).
如果您的唯一目的是“测试”控制台中的东西,这暂时没问题 (!)。如果您是出于调试目的而这样做,最好直接使用浏览器的开发人员工具调试器。
我正在使用带有一堆静态成员的“类”来使我的非常专业的代码在一定程度上组织起来。像这样:
index.html
<script type="module" src="client/js/main.js"></script>
main.js
import { UINav, UIDimension } from "./interface.js";
import { Dimension } from "./dimension.js";
import { InputFlex } from "./input.js";
function main() {
Dimension.init();
UIDimension.init();
UINav.init();
InputFlex.start();
}
我的问题:例如,当我想从浏览器控制台内部检查内容时,为什么我得到 Uncaught ReferenceError: InputFlex is not defined
,但导入的所有方法都按预期执行?如何从浏览器中找到我心爱的“类”?
我也在使用 TypeScript,但我怀疑这是否重要?
编辑:文件是从本地主机服务器获取的。
编辑:在我的环境中似乎存在一个普遍的问题,我什至无法在浏览器控制台中找到 main() 函数。 我是 运行 deno 服务器。这可能是我这个有趣问题的根源吗?
我能够从 js 文件中记录内容,但不能从浏览器控制台中记录内容,我被告知一切都未定义,但显然这些实体存在于某处,因为一切都按预期工作。
编辑:@iamimran input.js 就是这样:
export class InputFlex {
static myMember123 = {...};
static start() {...}
(...)
}
模块有自己的作用域。在其中声明的变量不是全局的。
这是好事:全局变量会导致冲突,使维护和调试更加困难。
如果您想从开发人员工具控制台访问它们,那么您需要将控制台移动到模块的范围内,例如通过在那里设置断点。
您的 import
显示您正在使用 ECMAScript modules。
使用模块背后的一个主要动机是不污染全局名称 space,这意味着模块中定义的任何变量都是该模块私有的,而不是全局的。这叫做封装.
如果您希望模块中的任何内容成为全局变量,您需要明确地将其“发布”到全局对象上:
import { UINav, UIDimension } from "./interface.js";
import { Dimension } from "./dimension.js";
import { InputFlex } from "./input.js";
// to "publish":
Object.assign(globalThis, { UINav, UIDimension, Dimension, InputFlex });
// ...
请记住,这有潜在的危险,因为上面对 Object.assign
的调用会有效地覆盖任何可能已经存在的全局变量(您要使用全局名称 space 的众多原因之一尽可能少,最好一点也不).
如果您的唯一目的是“测试”控制台中的东西,这暂时没问题 (!)。如果您是出于调试目的而这样做,最好直接使用浏览器的开发人员工具调试器。