1

最近在看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的例子,希望大家补充!


小被子
839 声望10 粉丝