最近在看JavaScript设计模式和开发实践,里面说到"设计模式的主题总是把不变的事物和变化的事物分离开",这就涉及到了解耦.耦合是一个很宽泛的概念,在此只为记录在js中出现的各种类型的耦合.
数据耦合:一个模块访问另一个模块时,彼此之间是通过简单的数据参数(不是控制参数/公共数据结构/外部变量)来交换输入输出信息的.网上搜到的解释,不是很懂!
function create(id) {
var box = document.createElement('div');
box.setAttribute('id', id);
return box;
}
function append(id) {
var box = create(id);
document.body.appendChild(box);
}
此处的耦合是因为append函数访问了create函数.
解决方案:
create函数不变,
function append(obj) {
document.body.appendChild(obj);
}
var box = create(id);
append(box);
控制耦合:如果一个模块通过传送开关/标志/名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合.网上搜到的解释,不是很懂!
var y = 1;
function a(x) {
if (x) {
y = 1;
} else {
y = 0;
}
}
function b() {
if (y == 1) {
console.log('y is 1');
} else {
console.log('y is 0');
}
}
解决方案:
1.将被调用模块内的判定上移到调用模块中进行
干掉var y = 1;和函数b
function a(x) {
if (x) {
console.log('y is 1');
} else {
console.log('y is 0');
}
}
2.被调用模块分解成若干单一功能的模块
内容耦合:当一个模块直接修改或者操作另一个模块的数据,或者直接转入另一个模块时,就发生了内容耦合.此时,被修改的模块完全依赖于修改它的模块.额额额,下面的例子和数据耦合的例子有啥不同???
function a() {
return 'kk';
}
function b() {
alert(a());
}
b();
解决方案:
a函数不变
function b(p1) {
alert(p1);
}
b(a());
还有 标记耦合 非直接耦合 外部耦合 公共耦合,这些都没有在网上找到合适的js的例子,希望大家补充!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。