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