最近在看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);
控制耦合:若是一个模块经过传送开关/标志/名字等控制信息,明显地控制选择另外一模块的功能,就是控制耦合.网上搜到的解释,不是很懂!app
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();
解决方案:code
a函数不变 function b(p1) { alert(p1); } b(a());
还有 标记耦合 非直接耦合 外部耦合 公共耦合,这些都没有在网上找到合适的js的例子,但愿你们补充!ip