同步模块模式(SyncModuleDefine(SMD))
- 定义:将复杂的系统,分解成高内聚、低耦合的模块(模块系统),使系统开发变得可控,可维护,可拓展
模块管理器实现
var F = function () {
const define = function (str, fn) {
let parts = str.split("."),
old = (parent = this),
i = 0,
len = parts.length;
for (; i < len; i++) {
if (!parent[parts[i]]) {
parent[parts[i]] = {
};
}
old = parent;
parent = parent[parts[i]];
}
if (fn) {
old[parts[--i]] = fn();
}
return this;
};
const module = function () {
let args = [].slice.call(arguments),
fn = args.pop(),
parts = Array.isArray(args[0]) ? args[0] : args,
modules = [],
modIds = "",
i = 0,
ilen = parts.length,
parent,
j,
jlen;
while (i < ilen) {
if (typeof parts[i] === "string") {
parent = this;
modIds = parts[i].split(".");
for (j = 0, jlen = modIds.length; j < jlen; j++) {
parent = parent[modIds[j]];
}
modules.push(parent);
}
else {
modules.push(parts[i]);
}
i++;
}
fn.apply(null, modules);
};
return {
define, module };
};
const f = F();
f.define("string.format", function () {
return {
trim(str) {
return str.replace(/^\s+|\s+$/g, "");
},
};
});
f.define("dom", function () {
const $ = function (id) {
$.dom = document.getElementById(id);
return $;
};
$.html = function (html) {
if (html) {
this.com.innerHTML = html;
return this;
}
else {
return this.dom.innerHTML;
}
};
return $;
});
console.log(f.dom("test").html());
f.define("dom.addClass");
f.dom.addClass = function (className) {
if (!~this.dom.className.indexOf(className)) {
this.dom.className += " " + className;
}
};
f.dom("test").addClass("test");
f.module(["dom", document], function (dom, doc) {
c