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

How to call a public method of one JS module into another, using the Revealing Module Pattern?

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

1) 模块 A

var lazyload = ( function() {

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

    return {
        loadDefault: loadDefault
    }

})();

2) 模块 B

var newposts = ( function() {

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

});

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

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

How do I call the loadDefault() method from Module A into the addNewPosts() method from Module B?

如果您使用的是老式的显示模块模式,您会使用 lazyload.loadDefault()。但请继续阅读...

Not sure if this has anything to do with it, but maybe it's worth mentioning that I'm using Webpack, so in my main .js file I'm importing both modules as such:

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

那你不想用贼法牧。相反,使用 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';

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