Что означает этот JavaScript? - PullRequest
       1

Что означает этот JavaScript?

4 голосов
/ 11 августа 2011

Я работаю над устаревшим приложением, и все 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 голосов
/ 11 августа 2011

Первая строка инициализирует 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

1 голос
/ 11 августа 2011

Я не совсем уверен, что именно вы не понимаете.В приведенном выше коде есть два «странных» момента, которые я попытаюсь объяснить, но если этого недостаточно, вам нужно будет лучше описать то, что вы не понимаете:

  1. Код проверяет, является ли i2b2.hive неопределенным, и устанавливает его как пустой объект, если это так.Поскольку свойство, очевидно, установлено в предыдущей строке, я предполагаю, что этот код генерируется динамически, и некоторая логика (например, эта проверка) определяется в коде JavaScript, даже если он может (должен?) Быть на стороне сервера.code.

  2. undefined==i2b2.hive - это плохой / неправильный способ проверки «неопределенности», потому что undefined не является зарезервированным словом в JavaScript. Это просто работает, потому что undefinedпросто переменная, которая - случайно - оказывается неопределенной.Вместо этого следует использовать if (typeof i2b2.hive == "undefined") ... или просто if (i2b2.hive) ....

1 голос
/ 11 августа 2011

Этот код javascript создает переменную с именем ib2b, которая имеет ряд свойств: sdx, events, hive и т. Д. Эти свойства содержат больше составных объектов, которые построены ниже.

Идея состоит в том, что на этот глобальный объект можно ссылаться из другого кода javascript, и он хранит глобальную конфигурацию для клиентского приложения.

0 голосов
/ 11 августа 2011

Кажется, что он устанавливает несколько параметров в этом i2b2 объекте. Сам по себе он ничего не «делает», но, похоже, он задает несколько основных параметров конфигурации для дальнейшего выполнения. Попробуйте найти похожие случаи в коде ниже.

Например, он устанавливает i2b2.hive.tempCellList[5].forceLoading на true. Позже приложение, вероятно, имеет if -условия, такие как

for(var i in i2b2.hive.tempCellList)
{
    if(i2b2.hive.tempCellList[i].forceLoading === true)
    {
        // do something...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...