Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用反射,动态加载require模块_Javascript_Requirejs - Fatal编程技术网

Javascript 使用反射,动态加载require模块

Javascript 使用反射,动态加载require模块,javascript,requirejs,Javascript,Requirejs,所以我有一个小的requirejs应用程序,它需要在运行时创建动态类列表的实例。基本上是反射。我已经读了很多书,但是我已经找到了很多关于Typescript的参考资料,我没有使用 其主要思想是,在requirejs准备就绪之前,一个数组将加载所需的类列表。这个数组是在其主入口点之后提供给requirejs的,我希望为每个入口创建一个实例 我在这里读了一些Ben Nadal的博客,我喜欢他的模式,并且认为这对于我计划动态创建的一些模块来说会很好 我有一个想法,我可以做这样的事情:- _.each(

所以我有一个小的requirejs应用程序,它需要在运行时创建动态类列表的实例。基本上是反射。我已经读了很多书,但是我已经找到了很多关于Typescript的参考资料,我没有使用

其主要思想是,在requirejs准备就绪之前,一个数组将加载所需的类列表。这个数组是在其主入口点之后提供给requirejs的,我希望为每个入口创建一个实例

我在这里读了一些Ben Nadal的博客,我喜欢他的模式,并且认为这对于我计划动态创建的一些模块来说会很好

我有一个想法,我可以做这样的事情:-

_.each(loader, function(dep) {
            require([dep.name]);
        });
其中
loader
是与数组列表一起加载的全局变量。但这并没有创建依赖项的实例,这就是我在本例中想要的,如下所示:-

new Carousel('Delboy');
new Carousel('Rodney');
new Carousel('Grandad');

在本例中,这将创建3个新转盘的实例,每个转盘都有一个通过构造函数传入的名称。我想我在理解上遗漏了一些东西,非常感谢您的帮助。

每个已解决的AMD依赖项都是一个AMD模块,这意味着它要么是一个单例对象,要么是一个函数。在你提到的Ben Nadel的帖子中,对“定义”和“实例”进行了区分。定义是一个单例,从定义(函数)可以创建多个实例。在Ben的术语中,RequireJS只提供定义,创建实例由您决定

因此,以下内容适用于您正在尝试的操作:

define('Carousel', [], function (name) {
    this.name = name;
});
var loader = {};
var carousels = ['Delboy','Rodney','Grandad'];

carousels.forEach(function (carouselName) {
    require(['Carousel'], function (Carousel) {
        loader[carouselName] = new Carousel(carouselName);
    });
});

回答得很好。谢谢;)