2013-03-25 28 views
0
jQuery.namespace = function() { 
    var a = arguments, o = null, i, j, d; 
    for(i = 0; i < a.length; i = i + 1) { 
     d = a[i].split("."); 
     o = window; 
     for(j = 0; j < d.length; j = j + 1) { 
      o[d[j]] = o[d[j]] || {}; 
      o = o[d[j]]; 
     } 
    } 
    return o; 
}; 

jQuery.namespace("com.fc"); 

我遇到了一些JS代碼,並不知道這是如何工作的&它做什麼。你用一個字符串調用函數,但函數不需要任何東西?整個事情的目的是什麼?這個jQuery名稱空間(JavaScript)如何工作?

+0

您可以將參數作爲參數獲取。 – 2013-03-25 17:10:46

+2

@Matt that _is_ unobfuscated ;-) – Alnitak 2013-03-25 17:14:02

回答

2

arguments是JavaScript中的一個關鍵字,它是一個類似數組的對象,它包含傳遞給函數的所有參數。

該函數遍歷每個參數,並假定每個參數都是一個字符串。然後它將字符串分割成'。'並創建由該點符號表示的深層對象。

考慮一個空物體{}。此功能與參數"com.fc"這個對象上進行操作將成爲:

{ 
    com: { 
     fc: { 
     } 
    } 
} 

在這種情況下,原來的目標是window,所以它使用字符串作爲點符號指南如何窗口中創建一個空的對象深入到物體中。

+0

是的:)我同意。 – 2013-03-25 17:15:14

3

參數是在

jQuery.namespace("com.fc");

參數[0]將是 「com.fc」

它出現的情況下傳遞給函數

的所有參數數組循環遍歷所有參數,並用「。」分隔命名空間。

然後嘗試遍歷名稱空間的窗口對象創建一個散列,最後它返回最低級別的散列。

看起來這個函數可用於使用走在深散列設置一個命名空間變量..

jQuery.namespace(「com.fc」)。東西=「球」

或如果命名空間已填充了數據或funcitons

jQuery.namespace("com.fc").somefunction(); 
jQuery.namespace("com.fc").somevalue; 

不知道爲什麼允許多個命名空間,因爲它只能返回你會看起來是最後的體操。