以上是一個簡單的實現,在不同的場景,可以做一些適當的變通,以做到因地制宜。 下面是一個模擬冒泡排序的動畫,嘗試著使用了一點點觀察者模式,似乎還不錯 復制代碼 代碼如下: function bubble(){ var obs = []; function compare(x, y) { return x.w - y.w; } function swap(a, i, j) { var t = a[i]; a[i] = a[j]; a[j] = t; } function proxy(a, i, j){ notify(a[i].id + "-" + a[j].id); swap.apply(null,arguments); } function notify(arg){ obs[0].m.call(obs[0],arg); } return { addOb:function(ob){ obs.push(ob); }, sort:function(arr){ var len = arr.length; for (var x = 1; x < len; x++) { for (var y = 0; y < len - x; y++) { if (compare(arr[y], arr[y + 1]) > 0) { proxy(arr, y, y + 1); } } } } } }