Создание и получение вложенных объектов на jQuery

Создание и использование вложенных объектов с помощью указания в виде строки чрезвычайно полезно при работе с динамическими структурами. Не только потому, что отпадает необходимость ручной проверки объекта/свойства, чтобы избежать сообщения об ошибке "{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 можно добавить к любой библиотеке.
Теги:
объект
Добавлено: 09 Мая 2018 17:22:31 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...