最近在看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