Шаблоны пространства имен


После окончания этой статьи : уроки из обзора кода JavaScript

Мне было интересно, если мое пространство имен

/**
 * The primary namespace object
 * @type {Object}
 * @alias BDDS
 */
if(!window['BDDS']) {
    window['BDDS'] = {};
}

если прикреплены к окну, это фрагмент недействительным, в соответствии со следующим?

Задача 9

Проблема: использовала схему пространства имен технически недопустимым.

Обратная связь: в то время как пространства имен применяется правильно, во всем остальном приложения, первоначальная проверка для существования пространства имен недействительным. Вот что в настоящее время у вас есть: 1, Если ( !Мое_пространство_имен ) { 2
Мое_пространство_имен = { }; 3 }

Проблема в том, что !Мое_пространство_имен бросит ReferenceError, потому что переменная Мое_пространство_имен никогда не был объявлен. Лучший рисунок будет воспользуйтесь логическое преобразование с внутренней переменной декларации, выглядит следующим образом: 01 Если ( !Мое_пространство_имен ) { Мое_пространство_имен 02 ВАР = { }; 03 } 04 05 //или 06 ВАР мое_пространство_имен = мое_пространство_имен || {}; 07 08 // хотя более эффективный способ сделать это: 09 // мое_пространство_имен || ( мое_пространство_имен = {} ); 10 // см. Этот тест jsperf тест: http://jsperf.com/conditional-assignment 11 12 //и 13 Если ( typeof на Мое_пространство_имен == ’не определено’ ) { 14 ВАР Мое_пространство_имен = { }; 15 }

Это может, конечно, быть сделано многими другими способами. Если вы заинтересованы в чтении больше о модели пространства имен (как и некоторые идеи по расширению пространства имен), недавно я писал “Необходимо в JavaScript Пространства Имен Шаблонов”. Юрий Зайцев также имеет довольно всеобъемлющий пост на структуру пространства имен.



243
2
задан 28 октября 2011 в 03:10 Источник Поделиться
Комментарии
2 ответа

Нет, ваш код правильный.

!ссылка только выдает справки об ошибке, если ее не определен.

окно определяется и окна["not_defined"] просто возвращает значение undefined , что не определены переменные.

3
ответ дан 28 октября 2011 в 03:10 Источник Поделиться

Я предпочитаю один лайнер, но это просто синтаксис вещь:

window.SomeNamespace = SomeNamespace || {};

0
ответ дан 31 октября 2011 в 06:10 Источник Поделиться