您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么理解Js中的命名空間”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“怎么理解Js中的命名空間”吧!
引入命名空間之前,一個(gè)令開(kāi)發(fā)人員頭疼的問(wèn)題就是如何防止函數(shù)名/類(lèi)名和其他人的沖突,在一個(gè)公司內(nèi)部項(xiàng)目組之間可以通過(guò)命名預(yù)定(比如加前綴等)解決這個(gè)問(wè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)難的話,你唯一能作的就是放棄其中一個(gè)(注:可能是我孤陋寡聞,呵呵)。命名空間的引入相當(dāng)程度上解決了這個(gè)問(wèn)題,當(dāng)然,如果你使用的命名空間和其他公司不幸一樣,而對(duì)方又是微軟、SUN等大佬,那恭喜你,呵呵@_@!
Javascript中的命名空間
從事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)方法
實(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ì)象)。
感謝各位的閱讀,以上就是“怎么理解Js中的命名空間”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)怎么理解Js中的命名空間這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。