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

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

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

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

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

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

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

實(shí)現(xiàn)非常簡(jiǎn)單,整個(gè)命名空間機(jī)制的實(shí)現(xiàn)不超過(guò)20行代碼,分析如下:

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

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

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


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

// 在Grandsoft.GEA命名空間里面聲明類(lèi)Person 
Grandsoft.GEA.Person = function(name, age) 

    this.name = name; 
    this.age = age; 


// 給類(lèi)Person添加一個(gè)公共方法show() 
Grandsoft.GEA.Person.prototype.show = function() 

    alert(this.name + " is " + this.age + " years old!"); 


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

相關(guān)文章

  • javascript管中窺豹 形參與實(shí)參淺析

    javascript管中窺豹 形參與實(shí)參淺析

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

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

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

    基于JS實(shí)現(xiàn)新聞列表無(wú)縫向上滾動(dòng)實(shí)例代碼

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

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

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

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

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

    JS 事件冒泡 示例代碼

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

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

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

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

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

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

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

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

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

最新評(píng)論

鄂托克旗| 天水市| 长春市| 淮北市| 印江| 神农架林区| 越西县| 海原县| 伊川县| 静宁县| 山阳县| 盐城市| 江孜县| 玉屏| 博乐市| 澄江县| 麦盖提县| 蓬安县| 南华县| 呼图壁县| 扎鲁特旗| 盱眙县| 金山区| 邯郸县| 灌南县| 平昌县| 西乌| 西充县| 丹凤县| 松滋市| 兴仁县| 松原市| 洞头县| 深水埗区| 邳州市| 阿拉善盟| 云浮市| 延寿县| 民县| 洪洞县| 彩票|