2011-08-11 99 views
4

我正在開發一個遺留應用程序,所有的JS對我來說似乎都很神祕。
這裏是一些神祕的線條加載之前,我不知道他們在做什麼。這是什麼意思?

var i2b2 = {sdx:{TypeControllers:{},Master:{_sysData:{}}},events:{},hive:{cfg:{},helpers:{},base_classes:{}},h:{}}; 
if (undefined==i2b2.hive) { i2b2.hive = {}; }  
i2b2.hive.tempCellsList = [ 
     { code: "PM", 
      forceLoading: true 
     }, 
     { code: "ONT" }, 
     { code: "CRC" }, 
     { code: "WORK"}, 
     { code: "SHRINE"}, 
     { code: "PLUGINMGR", 
      forceLoading: true, 
      forceConfigMsg: { params: [] } 
     } 
    ]; 

還有更多varif聲明,但他們都在做同樣的事情不同的變量。
請幫我解決這個謎。

+0

哦親愛的...類型強制與'undefined'比較。 Yaiks。如果你最終重複使用這段代碼,請幫助你一個忙,並用'if(typeof i2b2.hive ==='undefined')...'來代替它。 – Flambino

+2

爲什麼選擇「過於本地化」?恕我直言,這是一個有效的問題,雖然海報應該更好地描述他究竟是什麼(他)不明白。 – RoToRa

+0

可能的來源:[i2b2_loader.js](http://informatics.kumc.edu/work/browser/i2b2-webclient/webclient/js-i2b2/i2b2_loader.js?desc=1) –

回答

4

第一行使用初始化i2b2嵌套對象文字

var obj = {};是寫作var obj = new Object();

簡單對象文字的較短的方式將是

var simpleObject = { 
    property1: "Hello", 
    property2: "MmmMMm", 
    property3: ["mmm", 2, 3, 6, "kkk"], 
    method1: function() { 
     alert("my method") 
    } 
}; 

嵌套之一將是

var rectangle = { 
    upperLeft: { 
     x: 2, 
     y: 2 
    }, 
    lowerRight: { 
     x: 4, 
     y: 4 
    } 
}; 

此致是一個典型。

var i2b2 = { 
    sdx: { 
     TypeControllers: {}, 
     Master: { 
      _sysData: {} 
     } 
    }, 
    events: {}, 
    hive: { 
     cfg: {}, 
     helpers: {}, 
     base_classes: {} 
    }, 
    h: {} 
}; 

第二行應該是恕我直言

i2b2.hive = i2b2.hive || {}; 

這只是說,如果蜂巢未定義創建新的對象。

最後一行創建一個屬性tempCellsList到對象hive。 (請注意:hive又是i2b2屬性) 最後對象的新陣列添加到屬性tempCellsList

+0

感謝您的詳細解釋。所以'sdx:{TypeControllers:{},Master:{_sysData:{}}}'只是意味着var'i2b2'和屬性'sdx'具有p個屬性'TypeControllers:{}'和'Master'? – xyz

+0

是的。而已。把你的整個代碼放在這裏,以便你可以正確地閱讀它。 http://jsbeautifier.org/ – naveen

+0

我觀察到的一件事。在第一行中,我們定義了'i2b2.hive' var,然後我們檢查它是否是'undefined'。是否有意義 ? – xyz

1

此JavaScript代碼創建一個名爲ib2b變量具有多個屬性:sdxeventshive等,這些屬性持有更多的複合對象,如下構成。

想法是,這個全局對象可以從其他JavaScript代碼引用,它存儲客戶端應用程序的全局配置。

1

我不太清楚,究竟你不明白。有兩個「奇怪」關於點上面的代碼,我會試着解釋,但是如果這還不夠,你需要更好地描述你有什麼不明白:

  1. 代碼檢查是i2b2.hive是未定義的,並將其設置爲空對象,如果是。由於該屬性顯然是在前一行設置的,我的猜測是這個代碼是動態生成的,並且一些邏輯(如此檢查)在JavaScript代碼中定義,即使它可能(應該?)是服務器端碼。

  2. undefined==i2b2.hive是一個壞/錯誤的方式來測試「undefinedness」,因爲undefined是不是保留字在JavaScript.This只是工作,因爲undefined僅僅是一個變量 - 偶然 - 恰好是不確定的。相反,應該使用if (typeof i2b2.hive == "undefined") ...或只是if (i2b2.hive) ...

0

看起來好像它在那個i2b2對象中設置了一些參數。它本身並不「做」任何事情,但似乎爲進一步執行設置了一些基本配置設置。嘗試在下面的代碼中查找類似的事件。

例如它將i2b2.hive.tempCellList[5].forceLoading設置爲true。後來應用程序可能有if-條件,如

for(var i in i2b2.hive.tempCellList) 
{ 
    if(i2b2.hive.tempCellList[i].forceLoading === true) 
    { 
     // do something... 
    } 
} 
+0

謝謝:)它可能會幫助我在未來:) – xyz