国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

在JavaScript中實現命名空間

2024-09-06 12:44:27
字體:
來源:轉載
供稿:網友
注:好久沒寫了,今天把我在公司內網寫的文章拷一份,出來露露臉,剛轉Web開發,所以開始學javascript!

在引入命名空間之前,一個令開發人員頭疼的問題就是如何防止函數名/類名和其他人的沖突,在一個公司內部項目組之間可以通過命名預定(比如加前綴等)解決這個問題,但是把視線放到整個軟件開發領域,在當今協作開發相當盛行的時代,這個問題卻依然存在。在使用多個第三方框架或類庫的時候,你唯一能作的就是祈禱它們的命名不要沖突,如果真正發生這種災難的話,你唯一能作的就是放棄其中一個(注:可能是我孤陋寡聞,呵呵)。命名空間的引入相當程度上解決了這個問題,當然,如果你使用的命名空間和其他公司不幸一樣,而對方又是微軟、SUN等大佬,那恭喜你,呵呵@_@!

從事Web開發不可避免要接觸JavaScript,目前最新版本的JavaScript還是不支持命名空間,所以命名沖突的問題凸顯無疑,想象一下你引用了兩個js文件,卻發現由于命名問題導致你不得不放棄其中一個,從而導致多寫了許多代碼,無疑是十分令人沮喪的。在JavaScript新版本引入命名空間概念之前,發揚自立更生精神和創造性是我們程序員的基本義務;-)

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

實現原理:既然看清楚了類的本質,那么問題就簡單了,如果將GEA項目組所有JS類和函數作為屬性放在名為GEA的對象里面,然后將GEA對象以屬性的方式放在名為Grandsoft對象里面不就可以達到我們的目的,比如Grandsoft.GEA.Person實際上是在Grandsoft對象的屬性GEA(也是一個對象)中的類Person(還是一個對象)。

實現非常簡單,整個命名空間機制的實現不超過20行代碼,分析如下:

// 聲明一個全局對象Namespace,用來注冊命名空間
代碼如下:Namespace = new Object(); 

// 全局對象僅僅存在register函數,參數為名稱空間全路徑,如"Grandsoft.GEA" 
Namespace.register = function(fullNS) 

    // 將命名空間切成N部分, 比如Grandsoft、GEA等 
    var nsArray = fullNS.split('.'); 
    var sEval = ""; 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新竹县| 金湖县| 峨眉山市| 山丹县| 湾仔区| 来凤县| 当阳市| 镇巴县| 广宗县| 永登县| 绥中县| 朝阳区| 邯郸县| 奉化市| 河间市| 桑日县| 灯塔市| 元阳县| 沈阳市| 定日县| 海兴县| 叶城县| 洞头县| 合山市| 花莲县| 昌乐县| 永兴县| 惠东县| 施秉县| 宣汉县| 甘孜县| 武宣县| 枣庄市| 镇江市| 西乌珠穆沁旗| 长泰县| 万源市| 千阳县| 石渠县| 广州市| 尤溪县|