如何使用Revealing Module Pattern将一个JS模块的公共方法调用到另一个JS模块?

时间:2017-10-11 17:23:35

标签: javascript revealing-module-pattern

我一直在尝试使用Javascript的Revealing Module Pattern,但我不太明白我是否以及如何将一个模块的公共方法调用到另一个模块中。假设我有这两个模块(代码简化):

1)模块A

import numpy as np

mins = np.random.rand(2,2)
maxs = np.random.rand(2,2)

# Number of elements in the linspace
x = 3

m, n = mins.shape
results = np.zeros((m, n, x))

for i in range(m):
    for j in range(n):
        min = mins[i][j]
        max = maxs[i][j]
        results[i][j] = np.linspace(min, max, num=x)

2)模块B

var lazyload = ( function() {

    function loadDefault() {
        $('.lazy').load();
    } 

    return {
        loadDefault: loadDefault
    }

})();

如何将模块A中的var newposts = ( function() { function addNewPosts() { $('.posts').append(); } }); 方法调用到模块B中的loadDefault()方法?不确定这是否与它有任何关系,但也许值得一提的是我正在使用Webpack,所以在我的主.js文件中,我正在导入这两个模块:

addNewPosts()

1 个答案:

答案 0 :(得分:1)

  

如何将模块A中的loadDefault()方法调用到模块B中的addNewPosts()方法?

如果您使用的是旧式曝光模块模式,则执行lazyload.loadDefault()。但继续阅读...

  

不确定这是否与它有关,但也许值得一提的是我使用的是Webpack,所以在我的主.js文件中我导入了这两个模块:

import './ModuleA';
import './ModuleB'; 

然后你不想使用RMP。相反,请使用export

lazyload.js

export function loadDefault() {
    $('.lazy').load();
} 

newposts.js

import {loadDefault} from './ModuleA';

export function addNewPosts() {
    loadDefault();
    $('.posts').append();
}

或者,如果您想要导出的一个功能是默认设置:

lazyload.js

export default function loadDefault() {
    $('.lazy').load();
}

...然后导入

import loadDefault from './ModuleA';

RMP是解决JavaScript没有模块问题的方法。一旦您使用实际模块(在ES2015中引入),您就不再需要RMP(用于模块)。