你可以将模块导入数组吗?

时间:2017-09-21 18:16:14

标签: javascript

我有一个只包含javascript文件的目录。每个内部都有一个导出的animation()函数。我的目标是随机选择其中一个来使用。

在另一个文件中,我想将所有这些函数导入到数组中,这样我就可以以简单的方式随机选择它们。

我试过了:

var animations=[
  require('./Animations/1.js'),
  require('./Animations/2.js'),
  require('./Animations/3.js'),
]

但这并没有奏效。这可能吗?我知道我可以先将它们全部导入,然后将它们存储在一个数组中,但是如果有办法将它们直接导入到数组中则会更加清晰。

1 个答案:

答案 0 :(得分:0)

首先,当您键入require('./Animations/1.js')等时,您正在键入实际的程序语句("命令")而不是JavaScript对象("数据")。数组包含值,而不是命令。

话虽如此,您可以拥有一组模块/文件名,其中名称是用引号括起来的字符串。并且您可以在require语句中使用变量,并执行您想要操作的任何内容并更改该变量的值。因此,如果您想从一组名称中随机选择一个名称,并在require语句中使用该名称,那么您当然可以这样做。

我试过这个并且有效:

var fileNames = [
'mouse',
'bird',
'rabbit'
 ];

var n = Math.floor( Math.random() * fileNames.length );

var url = './' + fileNames[n] + '.js';

require(url);

animate();

我使用随机文件名('鼠标',#39;鸟'兔子')作为我的例子,因为你不总是有名字适合一个没有间隙的漂亮的数字序列。但是,如果您确定您的名称符合一个整洁,定义明确的模式,您当然可以相应地构建您的代码。

要回答原始问题,"您可以将模块导入阵列吗?",答案是肯定的,如果您真的想这样做的话。如果您开始使用require语句,您可能已经看到它们用于为变量赋值,如下所示:

var Mouse = require './mouse';
var Bird = require './bird';
var Rabbit = require './rabbit';

然后,您可以使用对模块的实际引用来填充数组,而不仅仅是它们的名称:

var modules = [Mouse, Bird, Rabbit];

相关问题