Создание и использование вложенных объектов с помощью указания в виде строки чрезвычайно полезно при работе с динамическими структурами. Не только потому, что отпадает необходимость ручной проверки объекта/свойства, чтобы избежать сообщения об ошибке "{x} is not defined". Если вы создадите свой метод правильно, то сможете устанавливать пустой объект в заданном месте (или пространстве имен) так, что другой пользователь сможет вызвать его. Вот как можно добавить описанный функционал к объекту jQuery.
JavaScript jQuery
Так как философия jQuery заключается в использовании одного и того же метода для получения и установки, мы будем следовать ей при создании нашего метода obj:
(function() {
// Метод для установки и получения объектов, которые могут существовать или нет
var objectifier = function(splits, create, context) {
var result = context || window;
for(var i = 0, s; result && (s = splits[i]); i++) {
result = (s in result ? result[s] : (create ? result[s] = {} : undefined));
}
return result;
};
// Получаем или устанавливаем объект
jQuery.obj = function(name, value, create, context) {
// Установка
if(value != undefined) {
var splits = name.split("."), s = splits.pop(), result = objectifier(splits, true, context);
return result && s ? (result[s] = value) : undefined;
}
// Получение
else {
return objectifier(name.split("."), create, context);
}
};
})();
Функция objectifier управляет как получением, так и установкой, в том числе и в заданном контексте (существующий объект). Вот несколько примеров использования метода jQuery.obj:
// Проверяем существование
var moduleNameExists = jQuery.obj("mynamespace.widget.moduleName"); // undefined
// Создаем объект
jQuery.obj("mynamespace.widget.moduleName", { prop: 1 }); // mynamespace.widget.moduleName.prop вернет 1
// Создаем объект на существующем объекте
jQuery.obj("subnamespace.subModuleName", { someProp: 8 }, true, mynamespace.widget);
// mynamespace.widget.subnamespace.subModuleName = { someProp: 8 }
Доступ к произвольным объектам с помощью строки позволяет избежать плясок с проверками существования объектов и свойств. Метод objectifier можно добавить к любой библиотеке.