javascript架構之全域變數

來源:互聯網
上載者:User

縱觀各大類庫的實現,一開始基本都是定義一個全域變數,然後對它進行擴充。如Prototype.js的Prototype,mootools的Native,Base2的Base,Ext的Ext,jQuery的jQuery,YUI的YUI,dojo的dojo,MochiKit的MochiKit等等。從全域變數的汙染程度來看,分為兩大類,Prototype,mootools與Base2歸一類。Prototype的哲學是對JS原生對象進行擴充。早些年,Ptototype差點成為事實的標準,因此基本沒有考慮到與其他庫的共存問題。基於Prototype,也發展出諸如script.aculo.us,rico,Plotr,ProtoChart,Scripty2等非常優秀的類庫以及一大堆收費外掛程式,非jQuery那一大堆垃圾外掛程式所能比擬的。不過,有點淵源的外掛程式幾乎與Prototype有關,如著名的lightbox。mootools是Prototype的升級版,更加OO,全面複製其API。Base則是想修複IE的Bug,讓IE擁有標準瀏覽器的API,因此也把所有原生對象汙染一遍。

剩下幾個大類庫就奉行非侵入的原則,盡量減少全域變數。如Ext還有更多小型類庫,它會選擇一個自訂對象(其實也是window的一個自訂屬性),然後對它的屬性進行擴充。基本思路是

Ext = {};Ext.Element= function(){}Ext.DomQuery = function(){}Ext.DomHelper = function(){}

jQuery也是一個window自訂屬性,而且從一開始就汙染了兩個(JQurey與$),因此一旦其他類庫佔用了$,它就退回用jQuery。它與Ext最大的不同的是。它是一個函數對象(Function),而不是一個純對象(Object)。它的所有擴充都是基於它的jQuery.fn即jQuery.prototype。其他可能暴露出來的變數都收到閉包與函數中。

dojo上來就來就構建它無擬倫比的包機制。整個命名空間都是由eval產生,然後再慢慢往dojo上添加屬性,情況同Ext。不過,它的設計是我見過的類庫中最複雜的,涉及的領域也非常廣泛,搞到代碼量達到驚人的9千行(兼注釋)。

MochiKit不知是不是從dojo中派生出來,沒怎麼研究。但它的組織形式與Ext與dojo很相似。

YUI與jQuery很相似,是一個函數對象,只不過它後面就沒有像jQuery那麼瘋狂,什麼都往原型中加。無疑,YUI與jQuery的理念是非常新穎的,函數比對象更能玩出花樣,起碼做鏈式操作也輕鬆性。但jQuery一開始就瞄準頁面的那個DOM元素,而YUI,dojo,Ptototype,mootools等具有強大繼承機制的,更樂意建立一個類,這就是jQuery在UI怎麼也比不上它的前輩的原因。另外,YUI的作者們在CSS,HTML也造詣極深,因此其UI設計是非常值得學習的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.