Javascript: 使用模块声明要全局使用的函数

Javascript: Declaring functions to be used globally using modules

我正在寻找一种方法来获得一个 common.js,如果你愿意的话,它包含一些要在层次结构下方的其他 js 脚本中使用的函数

通常我会这样做,只需简单地声明一个像这样的函数:function x(){...} 稍后从其他 js 调用。但是,当我尝试使用 Uglifyjs 解析和混合所有 .js 文件时,我 运行 使用这种方法遇到了一些麻烦。经过一些研究,我了解到使用 javascript modules 的一些优势 解决我的丑化问题并努力实现最佳实践。

我在这里使用模块找到了一个非常简洁的解决方案: Javascript : Best way to declare functions to be used globally?

符合我需要的代码:

The modules section isn't properly defined ... here's a slightly tidied up example.

window.MainModule = (function($, win, doc, undefined) {
    var modules = {};

    // -- Create as many modules as you need ...
    modules["alerter"] = (function(x,y){
        var someFunction = function(){ alert(xy); };

        return { 
            init: someFunction
        };
    }());

    modules["alerter2"] = (function(){
        var someFunction = function(){ alert('I alert second'); };

        return { 
            init: someFunction
        };
    }());

    return { 
        init: function(key){
        modules[key].init();
        }
    };
}(jQuery, this, document));

$(window.MainModule.init['alerter']);

我需要帮助的问题是我想初始化 module['alerter'] 并为函数提供参数

modules["alerter"] = (function(x,y){
    var someFunction = function(){ alert(xy); };            
    return { 
        init: someFunction
    };
}()); 

通过使用$(window.MainModule.init['alerter'])

我试图在一个对我来说相当陌生的领域进行具体说明。当然,我很感谢你的帮助。

如果你的项目支持es6,你可以"mainModule.js"有以下内容:

const alerter = function(x,y) {alert(x,y);};
const alerter2 = function() {alert('I alert second');};
export default {
  alerter,
  alerter2
}

并且在您需要使用 alerter 或 alerter2 的文件中,您只需:

import {alerter, alerter2} from 'path/to/mainModule.js';
alerter(param1, param2); 
alerter2();

既然你有这个 "init" 方法,我猜你想创建 classes "aleter" 和 "aleter2"。您也可以使用 javascript class 使其工作。 https://caniuse.com/#search=Class

你为什么不做以下事情:

window.MainModule = (function($, win, doc, undefined) {
    var modules = {};

    // -- Create as many modules as you need ...
    modules["alerter"] = (function(){
        var someFunction = function(x,y){ alert(x+y); return this;};

        return { 
            init: someFunction
        };
    }());

    modules["alerter2"] = (function(){
        var someFunction = function(){ alert('I alert second'); return this;};

        return { 
            init: someFunction
        };
    }());

    return { 
        module: function(key){
          return modules[key];
        }
    };
}(jQuery, this, document));

那么你可以这么简单地称呼它:

window.MainModule.module('alerter').init(1,2).init(2,3).init(3,4); 
window.MainModule.module('alerter2').init().init();

我最终使用 minify 实现了“babel”以支持 es6 并解决了 parse/mash .js 文件的 solve:ish 问题。谢谢你的好答案:)