在我的代码中,数组是从导入的模块声明的。与此模块相关的函数是从第二个模块导入的。下面是我的代码的简化版本:
第一个带有数组的模块
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]; },
};