javascript - 如何从构造函数调用全局变量
问题描述
我有一个看起来像这样的类:
class MyClass {
constructor() {
this.field = 42;
}
method() {
return "Hello world!";
}
}
我想将它的一个实例定义为全局变量,所以我注册了它:
global.MyObject= new MyClass();
这意味着这现在可以工作:
console.log(MyObject.field); // 42
console.log(MyObject.method()); // Hello world!
但是,每当我从另一个类调用相同的代码时,它突然变得更加随机:
class OtherClass {
constructor() {
console.log(MyObject.field); // undefined
console.log(MyObject.method()); // TypeError: MyObject.method is not a function
}
}
有时这有效,有时无效。我不知道它什么时候起作用,什么时候不起作用,只是它不是完全随机的。从同一个地方调用,构造函数要么工作要么不工作。这无助于隔离问题。
似乎当从没有直接的模块调用类的构造函数时,require('my-class')
它将不起作用-即使OtherClass
有这种要求?即使每个其他模块都有那个require
?这没有任何意义。
我用两个模块 A 和 B 进行了尝试。如果 A 定义了全局变量,则 B 可以访问它们,即使没有 a require
- 只要其他人拥有它。
所以......我很难过这是如何工作的。可能是一个愚蠢的 JavaScript 噱头,我不是原生 JavaScript 开发人员。
我的设置如下所示:
- 源/
- ActualCode(使用将创建的功能
OtherClass
)
- ActualCode(使用将创建的功能
- 测试/
- 嘲笑/
- 我的课
- 其他类 (
require('MyClass')
)
- 实际代码测试 (
require('ActualCode')
,require('OtherClass')
- 嘲笑/
从and 调用时in 的构造函数OtherClass
将能够访问,但不能从or调用。即使按顺序调用(因此全局变量确实存在)。MyClass
MyClass
OtherClass
ActualCode
ActualCodeTest
这意味着更改参数和添加 arequire
是不可能的,因为ActualCode
永远不应该知道测试代码。
问题似乎出在 Mocha 框架上。全局变量不能在“it”内部访问:
console.log(MyObject.field); // 42
it('test', () => {
console.log(MyObject.field); // undefined
}
如果我删除周围的代码,它将(显然)工作。
如何从类的构造函数中调用全局变量?
解决方案
当您将所有内容都放在一个文件中时,此示例代码将按预期工作:
$ cat sample.js
class MyClass {
constructor() {
this.field = 42;
}
method() {
return "Hello world!";
}
}
global.MyObject = new MyClass();
class OtherClass {
constructor(props) {
console.log(MyObject.field);
console.log(MyObject.method());
}
}
new OtherClass();
$ node sample
42
Hello world!
我怀疑在加载模块时这些行的运行顺序会出现混乱。Node 的模块加载代码将按照遇到的顺序运行每一行。
推荐阅读
- javascript - 如何使用 InnerHTML 将 html 类替换为脚本?
- java - 在 android studio 的 Calculator App 中删除 double 的问题?
- haskell - 如何在得到结果之前永久重试 IO?
- ios - 从回调函数 SWIFT 存储数据
- python - 将 timedelta[64] 列转换为从午夜开始的秒数
- c# - PdfStamper 未添加新文本以辅助 PDF
- docker - 从 sudo minikube start --vm-driver none 切换到 --vm-driver docker 并且无法再访问我的应用程序
- database - Laravel Eloquent:在单个数据库事务中保存模型和关系
- javascript - 滚动到下一个(无论 ID)
- python - FastICA 形状未与正常值对齐