本文送給那些準備寫Javascript架構或已經寫了一點的強人們,
我準備做架構的想法是很早以前就有的。主要有以下原因:
- 對於小應用,我覺得 jQuery 非常好,沒必要寫和 jQuery 一樣的架構。(學習時除外)
- 但大部分時候,我需要的是一個有各種小功能的一個 Javascript 架構 (比如 選項卡 - 閃動效果 - 彈窗廣告 - 文字框 ctrl + enter 的事件),對於網站後台,更需要一個完整的 使用者介面架構。
- 我認為理想的 使用者介面架構應該:
- 介面漂亮(Ext dwzjs 兩個架構的介面是我滿意的)
- 物件導向(Ext 是我滿意的)(即 比如建立一個 Panel 面板,使用: new Panel().show() 形式)
- 簡單靈活(jQueryUi YUI 是我滿意的) (即 比如我需要一個文字框,那就只要引進文字框,而且是很方便找到一個功能對應什麼資源)
- 免費(Ext 不算免費)(至少 LGPL 協議吧)
- 速度高,代碼小(這個是必須的,所有架構都盡量實現此目標)
- 要想同時滿足以上條件,於是,我便做了一個艱難的決定,進入Javascript架構開發領域。
一開始我花了一些時間開始寫代碼,但寫了才知道
架構不是你想做,想做就能做。
於是我便停下來, 開始讀 jQuery Mootools 和 Ext 源碼
在這些源碼都已大致搞定後,開始設計架構 ---- 設計很重要。
我發現很多人寫架構都是在模仿已有架構的設計,而不是自己去設計。故很多聲稱寫架構的人其實只是山寨架構。
比如我發現有個國內架構的結構和 jQuery 差不多,但內部一些函數名完全是作者自己習慣 ---- 甚至有很多英語的文法問題。
也有人寫架構就是靠自己的能力去完成 jQuery 的功能: 如果你不是為了學習,那就是為了浪費青春。
我對架構的設計是: 使用物件導向思想,將所有函數功能分類。比如和數組有關的一個函數: makeArray ,作為 Array 類的成員: Array.create(["aaa","bbb"]); 建立一個數組。
對於一個物件導向的Javascript架構,必須解決以下問題:
模組機制 - 你必須提供一個機制,管理全部的js檔案。而且模組互相引用的問題也必須解決。
類的建立和繼承 - 這是基本的,注意支援引用成員 - 現網上流行的那個建立類的代碼是不支援成員是引用對象的。
基本的庫函數 - 不必太多,這個主要給自己用,自己不要的不要加太多。
永遠不要添加 Object.prototype 盡量不要添加 Function.prototype
DOM 操作 - 記得相容 ,比如 萬一 $ 被使用
Dom 操作一般人是寫不出完美的, 必須學習成熟架構,或直接使用成熟的架構。
Ready 文檔載入運行 - 這是必須的, 這個建議學習 jQuery 。
具體解決方案見下文
目前我想我的底層架構已經完成,然後就是實現功能。具體實現很多的細節,也在下文說明。
大部分人應該沒想過怎麼做就開做了,於是問題很多,自己也覺得代碼亂。這時候要重新理代碼,不可繼續寫。
本人 QQ 744257564 擅長前端 XULD 歡迎討論