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: [] }
        }
    ];

他にも多くのvarステートメントifがありますが、それらは異なる変数で同じことを行っています。
この謎を解くのを手伝ってください。

4

4 に答える 4

4

The first line initialises i2b2 using nested object literals.

var obj = {}; is a shorter way of writing var obj = new Object();

A simple object literal will be

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

A nested one will be

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

Yours is a classic.

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

The second line should be IMHO

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

This just says that if hive is undefined create a new object.

The last lines create a property tempCellsList to the object hive. ( Please note that hive in turn is a property of i2b2 ) Lastly a new array of objects are added to the property tempCellsList

于 2011-08-11T09:36:22.190 に答える
1

このjavascriptコードは、、、、などのいくつかのプロパティを持つと呼ばれる変数を作成します。ib2bこれらのsdxプロパティは、以下で構築されるより多くの複合オブジェクトを保持します。eventshive

このグローバルオブジェクトは他のJavaScriptコードから参照でき、クライアント側アプリケーションのグローバル構成を格納するという考え方です。

于 2011-08-11T09:31:42.400 に答える
1

I'm not quite sure, what exactly you don't understand. There are two "strange" points about the code above, which I'll try to explain, but if that's not enough you will need to describe better what you don't understand:

  1. The code checks is i2b2.hive is is undefined and set it as an empty object, if it is. Since the property is obviously set in the previous line, my guess is that this code is generated dynamically and some of the logic (such as this check) is defined in the JavaScript code even if it could (should?) be the the server side code.

  2. undefined==i2b2.hive is a bad/wrong way to test "undefinedness", because undefined is not a reserved word in JavaScript.This just works, because undefined is just a variable that - by chance - happens to be undefined. Instead one should use if (typeof i2b2.hive == "undefined") ... or just if (i2b2.hive) ....

于 2011-08-11T09:36:51.963 に答える
0

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

たとえば、 に設定i2b2.hive.tempCellList[5].forceLoadingtrueます。後で、アプリケーションにはif次のような条件が含まれる可能性があります。

for(var i in i2b2.hive.tempCellList)
{
    if(i2b2.hive.tempCellList[i].forceLoading === true)
    {
        // do something...
    }
}
于 2011-08-11T09:37:05.880 に答える