我正在开发一个遗留的应用程序,所有的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语句,但它们对不同的变量做同样的事情。
请帮我解开这个谜团。
发布于 2011-08-11 17:36:22
第一行使用嵌套的对象文字初始化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: {}
};第二行应该是IMHO
i2b2.hive = i2b2.hive || {};这就是说,如果hive未定义,则创建一个新对象。
最后几行创建对象hive的属性tempCellsList。(请注意,hive反过来又是i2b2的属性)最后,一个新的对象数组被添加到属性tempCellsList
发布于 2011-08-11 17:31:42
这段javascript代码创建了一个名为ib2b的变量,该变量具有许多属性:sdx、events、hive等。这些属性包含更多复合对象,如下所示。
其思想是这个全局对象可以从其他javascript代码中引用,并且它存储客户端应用程序的全局配置。
发布于 2011-08-11 17:36:52
我不太确定,你到底不明白什么。上面的代码有两个“奇怪”的地方,我会试着解释一下,但如果这还不够,你需要更好地描述你不理解的东西:
未定义代码检查is is未定义,如果是,则将其设置为空对象。由于该属性显然是在前一行中设置的,因此我猜测这段代码是动态生成的,并且在JavaScript代码中定义了一些逻辑(例如此检查),即使它可以(应该吗?)作为服务器端的code.
undefined==i2b2.hive是测试“不确定性”的一种糟糕/错误的方式,因为undefined不是JavaScript.This中的保留字,因为undefined只是一个碰巧未定义的变量。相反,应该使用if (typeof i2b2.hive == "undefined") ...或只使用if (i2b2.hive) ....https://stackoverflow.com/questions/7023500
复制相似问题