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

还有更多varandif语句,但它们使用不同的变量做同样的事情。
请帮我解开这个谜。

4

4 回答 4

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

这只是说如果 hive 未定义,则创建一个新对象。

最后几行为tempCellsList对象创建了一个属性hive。(请注意,hive反过来又是 的一个属性i2b2)最后一个新的对象数组被添加到该属性中tempCellsList

于 2011-08-11T09:36:22.190 回答
1

此 javascript 代码创建一个名为的变量,该变量ib2b具有许多属性:sdxeventshive等。这些属性包含更多复合对象,这些对象在下面构造。

这个想法是这个全局对象可以从其他 javascript 代码中引用,它存储客户端应用程序的全局配置。

于 2011-08-11T09:31:42.400 回答
1

我不太确定,你到底不明白什么。上面的代码有两个“奇怪”的地方,我会试着解释一下,但如果这还不够,你需要更好地描述你不理解的地方:

  1. 代码检查是否i2b2.hive未定义并将其设置为空对象(如果是)。由于该属性显然是在上一行中设置的,我的猜测是这段代码是动态生成的,并且一些逻辑(例如这个检查)是在 JavaScript 代码中定义的,即使它可能(应该?)是服务器端代码。

  2. undefined==i2b2.hive测试“未定义性”是一种不好/错误的方法,因为undefined它不是 JavaScript 中的保留字。这很有效,因为undefined它只是一个碰巧未定义的变量。相反,应该使用if (typeof i2b2.hive == "undefined") ...或只是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 回答