摘要:什么是命名空間命名空間英語表示標識符的可見范圍。通用命名空間函數(shù)語言的與語法中,沒有內(nèi)置命名空間,但這種特征非常容易實現(xiàn)。添加到命名空間的屬性可能已經(jīng)存在,所以再添加屬性或者創(chuàng)建命名空間之間,我們應(yīng)該先檢查命名空間是否存在。
什么是命名空間
命名空間(英語:Namespace)表示標識符(identifier)的可見范圍。一個標識符可在多個命名空間中定義,它在不同命名空間中的含義是互不相干的。這樣,在一個新的命名空間中可定義任何標識符,它們不會與任何已有的標識符發(fā)生沖突,因為已有的定義都處于其它命名空間中。(維基百科)
命名空間的作用當一個工程很大時,既有自身的代碼,又有引用的外部庫,當自身庫和外部庫中的對象重名時,沒有命名空間將無法區(qū)分他們。
通用命名空間函數(shù)JavaScript語言的與語法中,沒有內(nèi)置命名空間,但這種特征非常容易實現(xiàn)。添加到命名空間的屬性可能已經(jīng)存在,所以再添加屬性或者創(chuàng)建命名空間之間,我們應(yīng)該先檢查命名空間是否存在。
var FN = FN || {};
如果定義FN.fn1.fn2,則:
var FN = FN || {}; var FN.fn1 = FN.fn1 || {}; var FN.fn1.fn2 = FN.fn1.fn2 || {};
可以看出每創(chuàng)建一個命名空間或者添加屬性,都需要對對象或?qū)傩宰龈郊訖z查,產(chǎn)生大量重復(fù)代碼,這違背了DRY原則,也是產(chǎn)生命名空間函數(shù)的原因。我們希望通過以下命名空間函數(shù)調(diào)用產(chǎn)生以上效果:
FN.namespace("FN.fn1.fn2")
于是我們可以做以下實現(xiàn):
var FN = FN || {}; FN.namespace = function(ns_string){ var parts = ns_string.split("."), parent = FN, i; if(parts[0] === "FN"){ left = parts.slice(1); } for(i = 0 ;i < left.length; i += 1){ if(typeof parent[left[i]] === "undefined"{ parent[left[i]] = {}; } parent = parent[left[i]] ; } } x = FN.namespace("FN.fn1.fn2");
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/85749.html
摘要:前綴命名空間如果命名空間的目的是避免沖突的話。語言程序經(jīng)常使用前綴命名空間。我認為前綴命名空間是中最清楚明白的命名空間系統(tǒng)。對象命名空間的一個問題是它會導(dǎo)致與面向?qū)ο笙鬟f混淆。嵌套命名空間的幻覺在中也存在。 原文鏈接:《JavaScript Namespacing》譯文原鏈:【譯】JavaScript 命名空間 JavaScript 中有很多可以給你的對象安全分配命名空間的方法。這...
摘要:原文鏈接譯文原鏈譯中的命名空間全局變量應(yīng)該由有系統(tǒng)范圍相關(guān)性的對象們保留,并且它們的命名應(yīng)該避免含糊并盡量減少命名沖突的風(fēng)險。其他的考慮我希望避免命名空間嵌套。因為并沒有正式的命名空間結(jié)構(gòu),所以有很多自然形成的方法。 原文鏈接: Namespacing in JavaScript譯文原鏈: 【譯】JavaScript 中的命名空間 全局變量應(yīng)該由有系統(tǒng)范圍相關(guān)性的對象們保留,并且它們的...
摘要:命名空間的實現(xiàn)在全局管理命名空間,可以把命名掛在在這個全局對象上,來實現(xiàn)命名空間的整合和通信。按照約定的命名規(guī)范,將本變量注冊到全局大型項目中,變量對象會出現(xiàn)多層級的結(jié)構(gòu),如一層一層注冊。 大型項目中-javaScript如何解決命名沖突 要解決命名沖突,即必須保證,本模塊的變量不會被其他模塊污染,為了保證命名空間的整潔,希望能夠在全局把這些變量用一種規(guī)范的方式組織起來。 命名空間的實...
摘要:和級分為許多模塊,分別描述了的某個非常具體的子集。這些模塊主要有核心視圖事件樣式遍歷和范圍以及。另外還有方法和方法框架的變化框架和內(nèi)嵌框架分別用和表示,它們在級中都有一個新屬性這個屬性包含一個指針,指向表示框架內(nèi)容的文檔對象。 DOM2和DOM3級分為許多模塊,分別描述了DOM的某個非常具體的子集。這些模塊主要有核心(Core)、視圖(Views)、事件(Events)、樣式(Styl...
摘要:全局變量函數(shù)內(nèi)的局部作用域和是函數(shù)內(nèi)的局部變量,而對的賦值將會覆蓋全局作用域內(nèi)的同名變量。命名空間只有一個全局作用域?qū)е碌某R婂e誤是命名沖突。另外兩種方式結(jié)論推薦使用匿名包裝器譯者注也就是自執(zhí)行的匿名函數(shù)來創(chuàng)建命名空間。 盡管 JavaScript 支持一對花括號創(chuàng)建的代碼段,但是并不支持塊級作用域; 而僅僅支持 函數(shù)作用域。 function test() { // 一個作用域 ...
閱讀 1256·2023-04-26 02:38
閱讀 943·2023-04-25 20:13
閱讀 3597·2021-11-19 11:31
閱讀 2403·2019-08-30 15:55
閱讀 2730·2019-08-30 14:11
閱讀 3166·2019-08-30 13:45
閱讀 1382·2019-08-29 18:41
閱讀 1155·2019-08-29 16:18