在JavaScript中實現命名空間

來源:互聯網
上載者:User

實現前提:與Delphi、C#等語言不同,JavaScript中的類並不是對象的定義,事實上JavaScript中並不存在真正的類,這裡的類實際上是用函數類比實現的,而JavaScript中的函數實際上是一個對象,因此在JavaScript中:一個類就是一個對象。這和傳統概念概念極為不同,在JavaScript中,建立某個類的執行個體實際上就是將類(=對象,記住)複製了一份。看到這裡,有點設計模式概念的應該就可以看出來了,在JavaScript中,類機制使用了原型(prototype)模式。

  // 聲明一個全域對象Namespace,用來註冊命名空間Namespace = new Object();// 全域對象僅僅存在register函數,參數為名稱空間全路徑,如"Grandsoft.GEA"Namespace.register = function(fullNS){    // 將命名空間切成N部分, 比如Grandsoft、GEA等    var nsArray = fullNS.split('.');    var sEval = "";    var sNS = "";    for (var i = 0; i < nsArray.length; i++)    {        if (i != 0) sNS += ".";        sNS += nsArray[i];        // 依次建立構造命名空間對象(假如不存在的話)的語句        // 比如先建立Grandsoft,然後建立Grandsoft.GEA,依次下去        sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS + " = new Object();"    }    if (sEval != "") eval(sEval);}

 

// 註冊命名空間Grandsoft.GEA, Grandsoft.GCMNamespace.register("Grandsoft.GEA");Namespace.register("Grandsoft.GCM");// 在Grandsoft.GEA命名空間裡面聲明類PersonGrandsoft.GEA.Person = function(name, age){    this.name = name;    this.age = age;}// 給類Person添加一個公用方法show()Grandsoft.GEA.Person.prototype.show = function(){    alert(this.name + " is " + this.age + " years old!");}// 示範如何使用類Personvar p = new Grandsoft.GEA.Person("yanglf", 25);p.show();

 

相關文章

聯繫我們

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