JavaScript組件:編碼實現和演算法

來源:互聯網
上載者:User

話說上期我們討論了隊列管理組件的設計,並且給它取了個響亮而獨特的名字:Smart Queue. 這次,我們要將之前的設計成果付諸實踐,用代碼來實現它。

首先,我們要考慮一下它的源檔案布局,也就是決定代碼如何拆分到獨立的檔案中去。為什麼要這麼做呢?還記得上期結尾處我提到這個組件會使用“外部代碼”嗎?為了區分代碼的用途,決定將代碼至少分成兩部分:外部代碼檔案和 Smart Queue 檔案。

區分用途只是其一,其二,分散到獨立檔案有利於代碼的維護。試想,以後的某一天你決定要在現有的隊列管理準系統之上,添加一些新的擴充功能,或是把它封裝成某個實現特定任務的組件,而又希望保持現有功能(內部實現)和調用方式(對外介面)不變,那麼將新的代碼寫到單獨的檔案是最好的選擇。

嗯,下期會重點談談檔案布局的話題,現在要開始切入正題了。第一步,當然是要為組件建立自己的命名空間,組件所有的代碼都將限制在這個頂層命名空間內:

var SmartQueue = window.SmartQueue {};
SmartQueue.version = '0.1';

初始化的時候,如果碰到命名空間衝突就把它拉過來用。通常這個衝突是由重複引用組件代碼導致的,因此“拉過來用”會將對象以同樣的實現重寫一次;最壞的情況下,如果碰巧頁面上另一個對象也叫 SmartQueue, 那不好意思了,我會覆蓋你的實現——如果沒有進一步的命名衝突,基本上兩個組件可以相安無事地運行。同時順便給它一個版本號碼。

接著,按三個優先順序為 SmartQueue 建立三個隊列:

var Q = SmartQueue.Queue = [[], [], []];

每個都是空數組,因為還沒有任務加進去嘛。又順便給它建個“捷徑”,後面要訪問數組直接寫 Q[n] 就可以啦。

接下來,我們的主角 Task 隆重登場——怎麼 new 一個 Task, 定義在這裡:

裡面的具體細節就不說了,有必要的注釋,一般我們的代碼也能做到自我描述,後面代碼也是這樣。這裡告訴客戶(使用者):你想建立一個 SmartQueue.Task 執行個體,就要至少傳一個參數給這個建構函式(後 3 個都可以省略進行預設處理),否則拋出異常伺候。

但是這還不夠,有時候,客戶希望從已有 Task 複製一個新執行個體,或是從一個“殘廢體”(具有部分 Task 屬性的對象)修複出“健康體”(真正的 Task 對象執行個體),通過上面的構造方式就有點不爽了——客戶得這樣寫:

var task1 = new SmartQueue.Task(obj.fn, 1, '', obj.dependencies);



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.