最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在JavaScript中實現(xiàn)命名空間

 更新時間:2006年11月23日 00:00:00   作者:  
注:好久沒寫了,今天把我在公司內(nèi)網(wǎng)寫的文章拷一份,出來露露臉,剛轉(zhuǎn)Web開發(fā),所以開始學(xué)javascript!

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

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

實現(xiàn)前提:與Delphi、C#等語言不同,JavaScript中的類并不是對象的定義,事實上JavaScript中并不存在真正的類,這里的類實際上是用函數(shù)模擬實現(xiàn)的,而JavaScript中的函數(shù)實際上是一個對象,因此在JavaScript中:一個類就是一個對象。這和傳統(tǒng)概念概念極為不同,在JavaScript中,創(chuàng)建某個類的實例實際上就是將類(=對象,記?。?fù)制了一份??吹竭@里,有點設(shè)計模式概念的應(yīng)該就可以看出來了,在JavaScript中,類機制使用了原型(prototype)模式。

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

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

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

// 全局對象僅僅存在register函數(shù),參數(shù)為名稱空間全路徑,如"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]; 
        // 依次創(chuàng)建構(gòu)造命名空間對象(假如不存在的話)的語句 
        // 比如先創(chuàng)建Grandsoft,然后創(chuàng)建Grandsoft.GEA,依次下去 
        sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS + " = new Object();" 
    } 
    if (sEval != "") eval(sEval); 

上面就是在JavaScript中模擬命名空間機制的完整實現(xiàn),使用方式如下: 


// 注冊命名空間Grandsoft.GEA, Grandsoft.GCM 
Namespace.register("Grandsoft.GEA"); 
Namespace.register("Grandsoft.GCM"); 

// 在Grandsoft.GEA命名空間里面聲明類Person 
Grandsoft.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!"); 


// 演示如何使用類Person 
var p = new Grandsoft.GEA.Person("yanglf", 25); 
p.show(); 
哈哈,簡單吧,這么簡單的代碼我就不多說了,大家自己看著玩吧,其實我有點懶,呵呵@_@!!!

相關(guān)文章

  • javascript管中窺豹 形參與實參淺析

    javascript管中窺豹 形參與實參淺析

    本想從語言的角度來分析,無奈功力不夠,只能粗淺的嘗試一下,于是稱之管中窺豹,還望大牛指正
    2011-12-12
  • JS中實現(xiàn)replaceAll的方法(實例代碼)

    JS中實現(xiàn)replaceAll的方法(實例代碼)

    本文是對JS中實現(xiàn)replaceAll的方法進行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-11-11
  • 基于JS實現(xiàn)新聞列表無縫向上滾動實例代碼

    基于JS實現(xiàn)新聞列表無縫向上滾動實例代碼

    當(dāng)新聞較多,并且空前有限的時候,使用滾動是一個不錯的選擇,本章節(jié)就通過代碼實例介紹一下如何實現(xiàn)此效果,對無縫向上滾動實例代碼感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • javascript實現(xiàn)驗證IP地址等相關(guān)信息代碼

    javascript實現(xiàn)驗證IP地址等相關(guān)信息代碼

    本文給大家分享的是一組判斷IP地址是否合法,判斷子網(wǎng)掩碼是否合法,驗證輸入的網(wǎng)關(guān)地址是否合法的javascript代碼,十分的簡單實用,有需要的小伙伴可以參考下。
    2015-05-05
  • javascript中數(shù)組的concat()方法使用介紹

    javascript中數(shù)組的concat()方法使用介紹

    數(shù)組的concat()方法想必大家比不陌生吧,在本文為大家介紹下javascript中數(shù)組的concat()方法的具體使用,感興趣的朋友可以參考下
    2013-12-12
  • JS 事件冒泡 示例代碼

    JS 事件冒泡 示例代碼

    JS 事件冒泡 示例代碼,大家可以參考下。
    2009-07-07
  • js 文件引入實現(xiàn)代碼

    js 文件引入實現(xiàn)代碼

    項目前端的文件和后臺開發(fā)分離,只要后臺開發(fā)更新svn前端的js,css文件都會更新,以前引用的是一個js文件如AA.js,由于想在項目中引用jquery庫,如果在每個文件的頭部都引讓他們從新寫入這個jq文件不太可能
    2010-04-04
  • 原生javascript制作的拼圖游戲?qū)崿F(xiàn)方法詳解

    原生javascript制作的拼圖游戲?qū)崿F(xiàn)方法詳解

    這篇文章主要介紹了原生javascript制作的拼圖游戲?qū)崿F(xiàn)方法,結(jié)合實例形式詳細(xì)分析了JavaScript制作拼圖游戲的相關(guān)步驟、原理、實現(xiàn)方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2020-02-02
  • 分享Typescript的13個基礎(chǔ)語法

    分享Typescript的13個基礎(chǔ)語法

    這篇文章主要分享了Typescript的14個基礎(chǔ)語法,Typescript可以說是JavaScript的超集,在JS的基礎(chǔ)上新增了許多語法特性,使得類型不再可以隨意轉(zhuǎn)換,能大大減少開發(fā)階段的錯誤。
    2021-12-12
  • TypeScript學(xué)習(xí)筆記之類型窄化篇

    TypeScript學(xué)習(xí)筆記之類型窄化篇

    目前用TypeScript的人越來越多,尤其是一些大廠,大的項目,github上面很多開源項目也都是ts語法編譯的,這篇文章主要給大家介紹了關(guān)于TypeScript學(xué)習(xí)筆記之類型窄化的相關(guān)資料,需要的朋友可以參考下
    2021-09-09

最新評論

渭南市| 靖州| 锡林浩特市| 奈曼旗| 来安县| 南澳县| 邛崃市| 射洪县| 旬邑县| 清新县| 莆田市| 定襄县| 南投县| 营山县| 阿图什市| 平塘县| 建水县| 岳西县| 交城县| 蓬安县| 文成县| 平乡县| 五华县| 顺平县| 湖南省| 辽源市| 子长县| 苍山县| 承德县| 封开县| 大厂| 五莲县| 阿拉善左旗| 漾濞| 罗源县| 仁怀市| 新巴尔虎左旗| 临沂市| 阜阳市| 柳州市| 宁陕县|