javascript - 如果我多次需要一个文件,它会被多次解析吗?

标签 javascript node.js require

我有一个 .js 文件,其中包含一个类定义(使用类语法,而不是函数语法,以防万一)。然后我想要一个包含多个文件的文件夹,每个文件都是一个函数,它创建具有不同属性的所述类的不同实例,并返回该实例。 当然,单实例创建文件无法访问类信息,除非这些文件中的每一个都有自己的“require(”class definition.js”);”线。 关键是,由于我将有数百个所述实例创建文件,重复的“要求”是否会破坏我的性能?我不信任 JavaScript,我基本上害怕它会在每次出现“require”时解析并替换类定义。有谁知道是否会发生这种情况?如果有,有什么解决方法吗?谢谢。


相关代码示例:

类定义.js

class myclass
    {
    constructor(a)
        {
        this.a = a;
        }
    }

实例化_0.js

require("class_definition.js");
module.exports = function()
    {
    return new myclass(0);
    }

实例化_1.js

require("class_definition.js");
module.exports = function()
    {
    return new myclass(1);
    }

测试.js

var arr = [];
for(var i=0; i<2; i++)
    {
    arr[i] = require("instantiate_" + i)();
    }

我真正想要的是类似于 C++ 的 .h 文件,类似于类定义文件的“#pragma once”指令。

最佳答案

javascript 中的模块和文件是单例的,这意味着如果您需要一个文件 50 次,它们都将指向一个单一的实例。以这段代码为例:

`// file a.js
module.exports = Math.random()`

`// file main.js
console.log(require('./a'));
console.log(require('./a'));
console.log(require('./a'));
console.log(require('./a'));`

你可能认为你将 console.log 输出 4 个不同的随机数,但它实际上会输出相同的数字 4 次,因为每个 require 语句将指向文件 a.js.

进一步阅读:https://willi.am/blog/2014/10/12/understanding-nodes-require-function/

关于javascript - 如果我多次需要一个文件,它会被多次解析吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50160969/

相关文章:

javascript - 将数值转换为字符串

javascript - Css 模态框 z 索引不起作用

javascript - 如何通过单击复选框启用输入

node.js - mongoose/mongodb 自定义排序

javascript - 在 Internet Explorer 中查看 localStorage - 无法获取名称/值对

javascript - 使用特定路径和命名空间连接到 Socket.IO 服务器

node.js - 为什么 Express 不提供我的静态文件?

php - CodeIgniter:无法打开流:没有这样的文件或目录

lua - require 语句正在覆盖 lua 中的全局变量

ruby - 在 Ruby 代码中将 "require"放在哪里?