模块

如何用JS实现类似requireJs的模块化?下面是个很精彩的例子:

var MyModules = (function () {
    var modules = {};
    function define(name, deps, impl) {
        for (var i = 0; i < deps.length; i++) {
            deps[i] = modules[deps[i]];
        }
        modules[name] = impl.apply(impl, deps);  // module[name] is object
    }

    function get(name) {
        return modules[name];
    }

    return {
        define: define,
        get: get
    }
}());

MyModules.define("bar", [], function () {
    function hello(who) {
        return "let me introduce " + who;
    }
    return {
        hello: hello
    }
});

MyModules.define("foo", ["bar"], function () {
    var hungry = "hippo";
    var bar = arguments[0];

    function awesome() {
        console.log(bar.hello(hungry).toUpperCase());
    }
    return {
        awesome: awesome
    }
});

var foo = MyModules.get('foo');
foo.awesome();

CMD/AMD创建模块

(function (root, factory) {

    "use strict";

    // CommonJS module is defined
    if (typeof module !== 'undefined' && module.exports) {
        module.exports = factory(require('jquery'), require('bootstrap'));
    }
    // AMD module is defined
    else if (typeof define === "function" && define.amd) {
        define("bootstrap-dialog", ["jquery", "bootstrap"], function ($) {
            return factory($);
        });
    } else {
        // planted over the root!
        root.BootstrapDialog = factory(root.jQuery);
    }
}(this, function ($) {
    // your module codes
    return MyModel;
})

results matching ""

    No results matching ""