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

标签 javascript 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';

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

关于javascript - 如何使用 Revealing Module Pattern 将一个 JS 模块的公共(public)方法调用到另一个 JS 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46694168/

相关文章:

javascript - 下面的方法在 javascript 中做了什么?

javascript - 有没有办法在 iPhone/iOS Safari 浏览器中调试 JavaScript?

javascript - UpdatePanel 回发删除使用 javascript 所做的更改

javascript - 揭示模块模式命名约定

javascript - 你如何在 jQuery 的 document.ready 中使用揭示模块模式?

javascript - 在原始文本字符串中的字符周围插入范围和类

javascript - 有没有办法创建一个绑定(bind)函数,在数组中提供它的参数?

javascript - 揭示模块模式结合 ES6 模块

Javascript:自调用单例函数与创建函数实例?

javascript - 如何让一些暴露模块代码仅在 DOM 准备好后运行?