2011-08-11 21 views
4

私はレガシーアプリケーションで作業しており、すべてのJSが私には不思議そうです。
これまでにロードされていたいくつかの不思議な行があります。私は彼らが何をしているのか分かりません。このJavaScriptは何を意味していますか?

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文がありますが、彼らはさまざまな変数と同じことをやっています。
この謎を解くのを手伝ってください。これらの特性は、以下に構成されているより多くの複合オブジェクトを保持するなど、sdxeventshive

+0

のように、ifのような条件があります。 Yaiks。このコードを再利用することになったら、あなた自身の好意を持って、それを 'if(typeof i2b2.hive === 'undefined')...'に置き換えてください: – Flambino

+2

"too localized" IMHOこれは有効な質問ですが、ポスターは理解していないものを正確に記述する必要があります。 – RoToRa

+0

可能なソース:[i2b2_loader.js](http://informatics.kumc.edu/work/browser/i2b2-webclient/webclient/js-i2b2/i2b2_loader.js?desc=1) –

答えて

4

最初の行は、を使用して、ネストされたオブジェクトリテラルを初期化します。

var obj = {};は、単純なオブジェクトリテラルvar obj = new Object();

を書くための簡単な方法である

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

になり、ネストされた1ユアーズは古典的です

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: {} 
}; 

2行目はあるべき私見

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

これはちょうどハイブが定義されていない場合は、新しいオブジェクトを作成することを言います。

最後の行は、オブジェクトhiveにプロパティtempCellsListを作成します。私はあなたが理解していない、まさに、非常にわからないんだけど、オブジェクトの新しい配列がtempCellsList

+0

このような詳細な説明をありがとう。だからsdx:{TypeControllers:{}、マスター:{_sysData:{}}} 'は、 '' TypeControllers:{} 'と' 'Master' 'を持つvar' i2b2'とプロパティ 'sdx'を意味しますか? – xyz

+0

はい。それでおしまい。あなたがそれを正しく読むことができるようにここにあなたの全体のコードを入れてください。 http://jsbeautifier.org/ – naveen

+0

私が観察したことの一つ。最初の行では 'i2b2.hive' varを定義しています。次に、' undefined'であるかどうかを調べています。それは理にかなっていますか? – xyz

1

このJavaScriptコードは、多くの特性を有するib2bと呼ばれる変数を作成します。

考えられるのは、このグローバルオブジェクトは他のJavaScriptコードから参照でき、クライアントサイドアプリケーションのグローバル設定が保存されているということです。

1

プロパティに追加されている最後に (順番にhivei2b2の財産であることに注意してください)。 2つがあり、「奇妙」のポイントは、私が説明しよう上記のコード、についてですが、それが十分ではない場合、あなたは理解していないものをよりよく説明する必要があります。

  1. コードチェックがi2b2.hiveですisは定義されていない場合は空のオブジェクトとして設定されます。プロパティは明らかに前の行に設定されているので、このコードは動的に生成され、ロジック(例:このチェックなど)の一部はJavaScriptコードで定義されていますコード。偶然 - - 未定義ことを起こるundefinedがあることだけ変数であるのでundefinedは、JavaScript.Thisで予約語だけの作品ではありませんので、

  2. undefined==i2b2.hiveは、「undefinedness」をテストするために悪い/間違った方法です。代わりにif (typeof i2b2.hive == "undefined") ...またはちょうどif (i2b2.hive) ...を使用する必要があります。

0

i2b2オブジェクトにはいくつかのパラメータが設定されているようです。それ自体は何もしませんが、それ以降の実行のための基本的な設定をいくつか設定しているようです。次のコードで同様のことを試してみてください。

たとえば、i2b2.hive.tempCellList[5].forceLoading~trueと設定します。アプリケーションの後のほうがおそらく

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

ありがとう:)それは将来私を助けるかもしれない:) – xyz

関連する問題