合并JavaScript中的模块



在我的代码中,数组是从导入的模块声明的。与此模块相关的函数是从第二个模块导入的。下面是我的代码的简化版本:

第一个带有数组的模块

let module1 = {};
module1.array = [10, 20, 30];

第二个具有函数的模块

var module2 = {};
module2.fct1 = () => { return array[0]; };
module2.fct2 = () => { return array[1]; };
module2.fct3 = () => { return array[2]; };

我想合并两个模块,以获得一个单一的实体:

module1.fct1 = module2.fct1;
module1.fct2 = module2.fct2;
module1.fct3 = module2.fct3;

module1现在包含数组和函数

{
array: [10, 20, 30],
fct1: () => { return array[0];    },
fct2: () => { return array[1];    },
fct3: () => { return array[2];    }
}

但是,当我调用函数时,数组似乎不在函数的作用域内:

console.log (module1.fct1())

我得到以下错误:

Uncaught ReferenceError: array is not defined

如果我用数组和函数在同一个文件中创建一个单独的模块,它可以工作。

我的问题是:有一种方法来合并两个模块在JavaScript。我的最终目标是将合并的模块传递给另一个函数。

这是一个JSFiddle: https://jsfiddle.net/Imabot/rxsfvgda/4/

似乎您期望module2的部分是方法,可以在具有.array属性的任何其他(模块)对象上调用。为此,您需要作为this.array访问数组,并且需要使用方法语法而不是箭头函数:

var module2 = {};
module2.fct1 = function() { return this.array[0]; };
module2.fct2 = function() { return this.array[1]; };
module2.fct3 = function() { return this.array[2]; };

简单或

var module2 = {
fct1() { return this.array[0]; },
fct2() { return this.array[1]; },
fct3() { return this.array[2]; },
};

最新更新