日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js命名空间

發布時間:2025/7/25 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js命名空间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在小規模的腳本開發中,有時候并不值得去引用命名空間,因為會帶來某種程度的復雜性;但是當在同一個網頁里引入10多個js文件之后,各js中的同 名函數就很容易沖突了。比如xxx庫里寫了個addCssStyle方法,yyy類庫里也寫了個addCssStyle方法,而這兩個方法的具體實現又有 一定差別。那么同時引用這兩個組件的時候,函數沖突之后導致頁面效果發生變化,調試和修改都是非常痛苦的,如果為了避免沖突,而放棄引用一些優秀的組件, 那更是讓人郁悶的事情。為此,在封裝javascript組件庫的時候,請使用命名空間來避免沖突。將所有的方法和變量都要按包名,類名的方式來寫。(這個時候寫代碼的感覺和封裝java的util方法一樣方便,呵呵)

所以,請記住:請為你封裝的JavaScript庫加上命名空間以提高代碼重用性。

但是JavaScript原生并不支持命名空間,需要變通來實現。

JavaScript中,所有的對象(或者稱類型,例如Boolean,Array,Function)都可以認為是一個關聯數組。關聯數組中的對象可以 使用點(.)進行引用,這樣我們可以利用關聯數組變相地實現命名空間。首先聲明一個關聯數組作為根,因為頁面聲明的對象都是window這個變量的成員, 所以一般命名空間的實現都以window為根。當向window申請a.b.c的命名空間時,首先在window中查看是否存在a這個成員,如果沒有則在 window下新建一個名為a的空關聯數組,如果已經存在a,則繼續在window.a中查看b是否存在,以此類推。下面分別是Atlas和YUI中的實 現方法。

//Atlas命名空間的實現方法

Function.registerNamespace =function(namespacePath){

//以window為根

var rootObject =window;

//對命名空間路徑拆分成數組

var namespaceParts =namespacePath.split('.');

for (var i =0;i <namespaceParts.length;i++) {

?? ?var currentPart =namespaceParts[i];

?? ?//如果當前命名空間下不存在,則新建一個Object對象,等效于一個關聯數組。

?? ?if (!rootObject[currentPart])???? ?{

????? ?rootObject[currentPart]=new Object();

?? ?}

?? ?rootObject =rootObject[currentPart];

}

}

以上JS命名空間的方式似乎已經過時了,那我們再來看看利用js對象字面量的方式來實現js的命名空間。

var school = {addClass:function(classnum){console.log(classnum);},addStudent:function(stuId){console.log(stuId);} } school.addClass("2");

以上就是采用的對象字面量的方法

轉載于:https://www.cnblogs.com/alisayuan/p/4735791.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的js命名空间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。