模块
如何用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;
})