Prototype -設計思想,程式碼群組織形式

來源:互聯網
上載者:User
內容提要

  闡述Prototype的程式碼群組織形式。

程式碼群組織形式概念

   程式碼群組織形式是指以代碼以什麼樣的形式存在庫中,存在的方式的劃分標準並不是統一的。有的是指代碼存在不同的檔案當中從而形成的邏輯關係或者物理關係,有的是指代碼是以物件導向的方式還是函數的方式存在。採取什麼樣的標準是以更好的闡述代碼架構為前提的,在這裡我使用的標準類似於函數與類的劃分。

  Prototype存在程式碼群組織形式我把他劃分為以下四種
   對Native的擴充;
  全域函數;
    全域類;
    全域對象;

Native

   很多時候我們忘記了Javascript本身是一門語言的事實。當我們被問到Javascript是什麼的時候我們通常會回答javascript能幹什麼,比如在頁面彈出一個對話方塊,做一個超炫的輪播廣告,自豪的說使用AJAX完成一次非同步登陸。如果我是一門語言我大概不喜歡被人這樣的去描述,我更希望說我有什麼樣的代碼風格(大括弧的,或者是函數式的),有什麼編程特性(閉包,易變性,事件驅動),以及有哪些原生的內部實現的對象。

  這兩種描述的區別在於前者是把javascript放到一個具體的應用環境(瀏覽器)去描述,它能做什麼在很大一部分程度上取決於這個具體的環境。而後者才是對javascript最真實的描述,須知javascript能做的不知是寫一個輪播廣告,現在Node.js讓javascript 能與php,jsp,asp.net等服務端程式設計語言比肩。

  Native是只javascript語言原生的對象,原生的類,原生的函數。它通常包括Object,Function,Date,Math,String,Number,Array等。而我們所常見的document,window,location則是瀏覽器建立的環境對象,不是Native的部分。

function的多面性之函數,類與對象

   在javascript當中function是一個神秘的存在,你可以稱它為函數,可以稱它為類,也可以稱它為對象,它都不介意。即使是同一個字面量,在不同的情況下你可以稱之為函數,類或者對象。其實訣竅就在於它被如何使用。關於function的function是函數還是類的問題這裡不做闡述。

內容主體

   在prototype中最重要的編程思想是對javascript原生對象,瀏覽器建立的環境對象進行侵入式的擴充。使得這些對象擁有更豐富的功能,或者是通過門面模式消除javascript引擎或者瀏覽器之間的差異。正所謂“成也風雲敗也風雲”,Prototype作為第一代javascript用戶端庫流行起來,大概也是因為對原生對象擴充所帶來的方便性。它的失敗也是因為隨著社會化編程時代的來臨,這種構造思想帶來的命名衝突無法完成集體編程的使命。現在業界普遍接受的觀點是不支援侵入式原生對象擴充編程,應當使用沙箱編程或者同名命名空間下的模組化編程。

  被prototype擴充的原生對象包括Object,Function,Date,RegExp,String,Array,Number以及一些HTMl元素。我們在這裡暫時不討論對這些對象做了哪些擴充。這種擴充包括了兩種形式,第一種是對對象的擴充,第二種是對對象的prototype屬性進行擴充。

//對String“類”的靜態擴充    Object.extend(String, {    interpret: function (value) {        return value == null ? '' : String(value);    },    specialChar: {        '\b': '\\b',        '\t': '\\t',        '\n': '\\n',        '\f': '\\f',        '\r': '\\r',        '\\': '\\\\'    }});
String.specialChar.b;//對String"類"公用函數,屬性擴充Object.extend(String.prototype, {Size:function(){return this.length}});
"licous".Size();

  在這裡我們都可以把String當成一個類來理解,前者是擴充的是一個類的靜態函數,後者擴充的是一個類的執行個體函數。從調用方式的不同我們很容易看到他們的不同。

  prototype沒有命名空間概念的思想,除了被擴充到原生對象當中的功能之外,其他的一切功能都是以全域性“對象”完成的。這樣做的弊端是可能造成命名衝突,汙染命名空間。但是好處是節省了代碼運行時的尋找時間。

  總體來說,prototype的編程思想有很強烈的單兵作戰的風格,與jQuery的組隊式集體作戰風格截然相反。我並沒有特別喜歡這兩種當中的任何一種,因為我既喜歡prototype獨斷天下的控制感,也喜歡jQuery社會化編程帶來的唾手可得的資源。

 

聯繫我們

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