首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何导出类的单个实例并在多个文件中导入相同的实例?

如何导出类的单个实例并在多个文件中导入相同的实例?
EN

Stack Overflow用户
提问于 2020-06-12 21:25:03
回答 3查看 1.7K关注 0票数 1

我有一个基本文件,它包含一个类:

档案-1:

代码语言:javascript
复制
class Foo {
   constructor() {
     this.count = 0;
   }
}

export = new Foo();

然后我将这个实例导入到另外两个文件中:

档案-2:

代码语言:javascript
复制
import Foo = require("./File-1");
Foo.count = 6;
export const logFile2Count = () => console.log(Foo.count); // 6

档案-3:

代码语言:javascript
复制
import Foo = require("./File-1");
export const logFile3Count = () => console.log(Foo.count); // 0

档案-4:

代码语言:javascript
复制
import { logFile2Count } from "./File-2";
import { logFile3Count } from "./File-3";

logFile2Count(); // "6"
logFile3Count(); // "0" (Expected 6)

我希望Foo的状态在导入到的所有文件中保持持久性。也就是说,我想在每个文件中导入Foo的引用,而不是在每个文件中导入Foo的副本。我该怎么做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-12 21:38:55

我不确定,但经过一些实验,这是因为require相对于导入语句的行为方式(可能与tsc/babel转换代码的方式有关);它运行文件中的整个代码,然后给出导出的值。如果您更改为使用import语句,那么它将工作,因为它在导出时为类提供了一个引用,而不是运行整个文件并为您提供一个新实例。

这将给你你想要的行为:

档案-1:

代码语言:javascript
复制
class Foo {
   constructor() {
     this.count = 0;
   }
}

const foo = new Foo();
export foo;

档案-2:

代码语言:javascript
复制
import { foo } from "./File-1";
/** -- snip -- **/
票数 1
EN

Stack Overflow用户

发布于 2020-06-12 21:38:42

实际上,我在节点js中尝试了下面的操作,使用了require而不是import。它似乎与预期的文件-1.js一样工作。

代码语言:javascript
复制
class Foo {
   constructor() {
     this.count = 0;
   }
}

module.exports = new Foo();

File-2.js

代码语言:javascript
复制
let Foo = require("./File-1");
Foo.count = 6;
module.exports.logFile2Count = () => console.log(Foo.count); // 6

File-3.js

代码语言:javascript
复制
let Foo = require("./File-1")
module.exports.logFile3Count = () => console.log(Foo.count); // 0

File-4.js

代码语言:javascript
复制
let  {logFile2Count} = require("./File-2");
let  {logFile3Count} = require("./File-3");

logFile2Count(); // "6"
logFile3Count(); // "0" (Expected 6)

这是我得到的输出

代码语言:javascript
复制
node File-4.js 
6
6
票数 1
EN

Stack Overflow用户

发布于 2020-06-12 22:06:14

如果没有任何形式的同步。在File-2.jsFile-3.js模块之间,在从File-1.js读取之前(比如File-2.js依赖于File-3.js,反之亦然),我认为您只能在公共依赖项File-1.js中直接设置值,以100%确保依赖模块读取相同的值。

这是因为代码变成了一种种族条件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62352740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档