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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript创建命名空间

發布時間:2023/12/10 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 = "";var sNS = "";for (var i = 0; i < nsArray.length; i++){if (i != 0) sNS += ".";sNS += nsArray[i];// 依次創建構造命名空間對象(假如不存在的話)的語句// 比如先創建Grandsoft,然后創建Grandsoft.GEA,依次下去sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS + " = new Object();"}if (sEval != "") eval(sEval); }

  

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

// 注冊命名空間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();

?

第二種創建命名空間的方法:

eye = {namespace: function() {var a = arguments, o = null, i, j, d, rt;for (i = 0; i < a.length; ++i) {d = a[i].split(".");rt = d[0];eval('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';');for (j = 1; j < d.length; ++j) {o[d[j]] = o[d[j]] || {};o = o[d[j]];}}} };eye.namespace("eye", "eye.common", "eye.datePicker", "eye.selectCity", "eye.tab","eye.test"); eye.test={//測試命名空間show: function() {return "aaa";} } alert(eye.test.show());//命名空間

?

function ns(pkg){if (!pkg) {return null;}var o = {};var result = o;var arr = pkg.split('.');alert([arr[0]]);o = o[[arr[0]]] = {};var len = arr.length;for (var i = 1; i < len; i++) {o = o[arr[i]] = {};}return result; }var pkg = ns("com.momo.test"); alert(pkg.com);

?

轉載于:https://www.cnblogs.com/gaojianqi/p/3454004.html

總結

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

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