china0114.com-日韩欧美中文免费,免费视频一区,免费视频一区,国产精品色网

公眾號
關(guān)注微信公眾號
移動端
創(chuàng)頭條企服版APP

前端開發(fā)入門知識:JavaScript命名空間常用方法

4057

很多學(xué)習(xí)前端開發(fā)的小伙伴都會遇到這樣的問題:在JavaScript中全局變量經(jīng)常會引起命名沖突,甚至有時侯重寫變量不是按照想像中的順序來。避免全局變量名沖突的最好辦法還是創(chuàng)建命名空間,接下來千鋒重慶Web培訓(xùn)老師就給大家分享在JavaScript中創(chuàng)建命名空間的幾種常用方法。

JavaScript的執(zhí)行環(huán)境由各種各樣的全局變量構(gòu)成,這些全局變量先于函數(shù)執(zhí)行環(huán)境而創(chuàng)建、這些全局變量都掛載于“全局對象”下。當(dāng)名稱有沖突時就會產(chǎn)生一些不可控的問題,比如命名沖突、代碼的脆弱性、難以測試等。

在編程開發(fā)中合理的使用命名空間可以避免相同的變量或?qū)ο竺Q產(chǎn)生的沖突,而且命名空間也有助于組織代碼有更強的可維護(hù)性和可讀性。JavaScript中雖然沒有提供原生的命名空間支持,但我們可以使用其他的方法(對象和閉包)實現(xiàn)類似的效果。

1、單一全局變量

JavaScript中一個流行的命名空間模式是選擇一個全局變量作為主要的引用對象,因為每個可能的全局變量都成為唯一全局變量的屬性,也就不用再創(chuàng)建多個全局變量,也就避免了和其他聲明的沖突。不過單一全局變量模式已經(jīng)在不少的JavaScript類庫中使用,如:YUI定義了唯一的YUI全局對象,jQuery定義了$和jQuery,$由其他類庫使用時使用jQuery等。示例如下:

var myApplication = (function() {

function() {

// ***

},

return {

// **

}

})();

2、命名空間前綴

命名空間前綴模式其思路非常清晰,就是選擇一個獨特的命名空間,然后在其后面聲明聲明變量、方法和對象。示例如下:

var = myApplication_propertyA = {};

var = myApplication_propertyA = {};

function myApplication_myMethod() {

// ***

}

從某種程度上來說,它確實減少了命名沖突的發(fā)生概率,但其并沒有減少全局變量的數(shù)目,在使用這種模式時一定要特別注意。

3、對象字面量表示法

對象字面量模式可以認(rèn)為是包含一組鍵值對的對象,每一對鍵和值由冒號分隔,鍵也可以是代碼新的命名空間。示例如下:

var myApplication = {

// 可以很容易的為對象字面量定義功能

getInfo:function() {

// ***

},

// 可以進(jìn)一步支撐對象命名空間

models:{},

views:{

pages:{}

},

collections:{}

};

對象字面量為我們提供了優(yōu)雅的鍵/值語法,我們可以非常便捷的組織代碼封裝不同的邏輯或功能,而且可讀性、可維護(hù)性、可擴(kuò)展性極強。

4、嵌套命名空間

嵌套命名空間模式可以說是對象字面量模式的升級版、它也是一種有效的避免沖突模式、因為即使一個命名空間存在、它也不太可能擁有同樣的嵌套子對象、示例如下:

var myApplication = myApplication || {};

// 定義嵌套子對象

myApplication.routers = myApplication.routers || {};

myApplication.routers.test = myApplication.routers.test || {};

當(dāng)然、我們也可以選擇聲明新的嵌套命名空間或?qū)傩宰鳛樗饕龑傩浴⑷纾?/p>

myApplication[′routers′] = myApplication[′routers′] || {};

使用嵌套命名空間模式可以使代碼易讀且有組織性,而且相對安全、不易產(chǎn)生沖突,其弱點是如果我們的命名空間嵌套過多會增加瀏覽器的查詢工作量。

5、立即調(diào)用的函數(shù)表達(dá)式

立即調(diào)用函數(shù)(IIFE)實際上就是匿名函數(shù),被定義后立即被調(diào)用。IIFE是用于封裝應(yīng)用程序邏輯的常用方法,以保護(hù)它免受全局名稱空間的影響。示例如下:

// 命名空間和undefined作為參數(shù)傳遞,確保:

// 1.命名空間可以在局部修改,不重寫函數(shù)外部上下文

// 2.undefined 的參數(shù)值是確保undefined,避免ES5規(guī)范里定義的undefined

(function (namespace, undefined) {

// 私有屬性

var foo = "foo";

bar = "bar";

// 公有方法和屬性

namespace.foobar = "foobar";

namespace.sayHello = function () {

say("Hello World!");

};

// 私有方法

function say(str) {

console.log("You said:" str);

};

})(window.namespace = window.namespace || {});

可擴(kuò)展性是任何可伸縮命名空間模式的關(guān)鍵,使用IIFE可以輕松實現(xiàn)這一目的,我們可以再次使用IIFE給命名空間添加更多的功能。

6、命名空間注入

命名空間注入是IIFE的另一個變體,從函數(shù)包裝器內(nèi)部為一個特定的命名空間“注入”方法和屬性,使用this作為命名空間代理,這種模式的優(yōu)點是可以將功能行為應(yīng)用到多個對象或命名空間。示例如下:

var myApplication = myApplication || {};

myApplication.utils = {};

(function () {

var value = 5;

this.getValue = function () {

return value;

}

// 定義新的子命名空間

this.tools = {};

}).apply(myApplication.utils);

(function () {

this.diagnose = function () {

return "diagnose";

}

}).apply(myApplication.utils.tools);

// 同樣的方式在普通的IIFE上擴(kuò)展功能,僅僅將上下文作為參數(shù)傳遞并修改,而不是僅僅使用this,如果你經(jīng)常被全局變量沖突困擾,一定要牢記JavaScript命名空間知識點。


聲明:該文章版權(quán)歸原作者所有,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點和對其真實性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問題,請在30日內(nèi)與本網(wǎng)聯(lián)系。
您閱讀這篇文章花了0
轉(zhuǎn)發(fā)這篇文章只需要1秒鐘
喜歡這篇 3
評論一下 0
凱派爾知識產(chǎn)權(quán)全新業(yè)務(wù)全面上線
相關(guān)文章
評論
登錄后發(fā)表評論
凱派爾知識產(chǎn)權(quán)全新業(yè)務(wù)全面上線
寧波城市站
金華城市站
×
#熱門搜索#
精選雙創(chuàng)服務(wù)
歷史搜索 清空

Tel:18514777506

關(guān)注微信公眾號

創(chuàng)頭條企服版APP

china0114.com-日韩欧美中文免费,免费视频一区,免费视频一区,国产精品色网
成人av影院在线| 日韩欧美一区二区三区在线| 欧美精品国产精品| 欧美激情一区二区三区在线| 亚洲成人激情社区| 99久久综合精品| 久久综合狠狠综合久久综合88| 亚洲一区在线观看免费观看电影高清| 国产精品88av| 欧美成va人片在线观看| 亚洲一区二区三区三| 成人av在线一区二区| 久久综合久久综合九色| 青青草成人在线观看| 欧美少妇一区二区| 亚洲精品大片www| 不卡的看片网站| 国产欧美一区二区精品忘忧草| 蜜桃av一区二区在线观看| 欧美日韩视频专区在线播放| 亚洲精品成人精品456| 99在线精品观看| 国产欧美日韩精品a在线观看| 久久激五月天综合精品| 91麻豆精品国产91久久久久久 | 国产清纯白嫩初高生在线观看91 | 国产一区二三区好的| 欧美一区二区三区在线电影| 亚洲成a人v欧美综合天堂| 色综合久久中文字幕综合网| 中文字幕一区二区三区不卡| 国产精品网曝门| 韩国av一区二区三区在线观看| 91精品国产手机| 日韩二区三区四区| 日韩一区二区三区四区| 日本aⅴ免费视频一区二区三区| 91麻豆精品国产| 免费成人av在线| 日韩精品在线一区| 精品无人码麻豆乱码1区2区 | 青青草国产精品97视觉盛宴| 欧美一区2区视频在线观看| 男女男精品视频网| 欧美va亚洲va香蕉在线| 久久国产尿小便嘘嘘| 精品久久国产老人久久综合| 国模娜娜一区二区三区| 国产欧美在线观看一区| gogo大胆日本视频一区| 亚洲码国产岛国毛片在线| 在线中文字幕不卡| 亚洲成年人网站在线观看| 777久久久精品| 精品一区免费av| 国产欧美日韩另类一区| 99久久久无码国产精品| 一区二区三区四区蜜桃| 欧美狂野另类xxxxoooo| 久久精品国产在热久久| 久久亚洲精品小早川怜子| 懂色中文一区二区在线播放| 综合久久久久久| 欧美性感一区二区三区| 日韩激情一二三区| 久久久久国产精品麻豆| 99久久综合国产精品| 亚洲国产成人高清精品| 91精品国产综合久久精品性色| 久久精品国产99国产精品| 国产午夜精品一区二区三区四区| thepron国产精品| 亚洲一区在线免费观看| 日韩欧美你懂的| 成人免费高清视频| 一区二区三区不卡在线观看| 欧美精品v日韩精品v韩国精品v| 久久99精品一区二区三区| 国产精品午夜电影| 欧美日韩在线精品一区二区三区激情 | 中文字幕欧美激情| 在线免费观看视频一区| 秋霞国产午夜精品免费视频| 久久久久免费观看| 色综合天天性综合| 免费成人在线影院| 国产精品午夜在线观看| 欧美特级限制片免费在线观看| 美日韩一区二区| 国产精品乱码一区二三区小蝌蚪| 日韩精品一二区| 欧美精品一区二区三区蜜臀| 大胆欧美人体老妇| 亚洲成av人片在线| 久久久蜜桃精品| 欧美在线你懂的| 婷婷久久综合九色综合绿巨人| 久久久久久一二三区| 色噜噜久久综合| 久久99国产精品尤物| 中文字幕日韩av资源站| 在线不卡a资源高清| 国产精品1区二区.| 亚洲chinese男男1069| 国产视频一区二区三区在线观看| 欧洲av在线精品| 国产麻豆精品视频| 亚洲va中文字幕| 欧美激情资源网| 日韩一区二区三区免费看| 成人爱爱电影网址| 轻轻草成人在线| 亚洲人成网站精品片在线观看| 日韩美女天天操| 一本久道久久综合中文字幕| 国内国产精品久久| 香蕉乱码成人久久天堂爱免费| 国产精品天干天干在观线| 日韩一级黄色片| 在线观看免费一区| 国产aⅴ精品一区二区三区色成熟| 图片区小说区区亚洲影院| 国产精品久久久久毛片软件| 日韩欧美久久一区| 欧美视频一区在线观看| 北条麻妃一区二区三区| 久久99精品久久久| 亚洲国产精品尤物yw在线观看| 欧美国产国产综合| 精品国产一区二区三区忘忧草| 欧美日韩激情一区二区| 97久久精品人人做人人爽50路| 国产真实乱子伦精品视频| 视频一区欧美精品| 亚洲精品乱码久久久久久黑人| 久久久国产精品麻豆| 91精品国产色综合久久不卡蜜臀| 91久久精品一区二区三| 成人精品电影在线观看| 国内精品嫩模私拍在线| 日韩电影一二三区| 亚洲大片一区二区三区| 亚洲另类春色校园小说| 国产清纯美女被跳蛋高潮一区二区久久w | 精品国内二区三区| 欧美老女人第四色| 在线免费观看日韩欧美| 99精品热视频| 99视频在线精品| 成人av资源网站| 国产91高潮流白浆在线麻豆| 黑人精品欧美一区二区蜜桃| 欧美a级理论片| 午夜久久久久久久久| 一区二区三区日本| 综合久久久久久| 国产精品久久久久久久久免费桃花 | 国产精品污网站| 国产三级欧美三级日产三级99| 精品国产麻豆免费人成网站| 日韩三级精品电影久久久| 欧美精品久久一区二区三区| 欧美日韩一区小说| 欧美日韩一本到| 欧美日韩免费电影| 欧美少妇xxx| 欧美另类一区二区三区| 欧美日韩高清一区二区三区| 欧美日韩国产综合一区二区三区| 在线免费观看日本欧美| 欧美性生交片4| 欧美肥胖老妇做爰| 91精品国产综合久久福利| 91麻豆精品国产| 日韩欧美一卡二卡| 精品国产乱码久久久久久老虎| 精品久久一二三区| 久久一日本道色综合| 久久精品欧美日韩| 国产精品美女久久久久久久久久久 | 欧美成人精品1314www| 欧美成人女星排行榜| 久久一区二区三区四区| 国产日本一区二区| 中文字幕亚洲电影| 一区二区三区在线视频免费| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲午夜电影网| 婷婷久久综合九色国产成人| 美国毛片一区二区| 国产福利一区在线观看| 成人app网站| 欧美影片第一页| 欧美一区二区三区小说| 欧美精品一区二区蜜臀亚洲| 国产精品污网站| 亚洲va在线va天堂| 极品少妇xxxx精品少妇偷拍| 成人免费视频app| 在线观看亚洲一区|