Блог веб разработки статьи | видеообзоры | исходный код

Блог веб разработки статьи | видеообзоры | исходный код

webfanat вконтакте webfanat youtube

Пространство имен в javascript

Пространство имен в javascript

Всем привет! Данная статья посвящается такой интересной теме как пространство имен в javascript. Для тех кто не знает пространство имен служит как абстрактное хранилище(окружение) которое позволяет изолировать код от глобального контекста и сделать к нему доступ только по специальному имени(имени пространства имен). Такой подход позволяет легко обезопасить вас от ошибок использования уже определенных функций или переопределения существующих переменных, то есть снизить количество возможных конфликтов.

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

Создадим наше первое пространство имен с названием "MYNAMESPACE".

const  MYNAMESPACE = (function(){ })();

Здесь мы создали константу "MYNAMESPACE" в качестве значения которой присвоили анонимную функцию. По сути все что будет внутри функции можно назвать пространством имен(в нашем случае имени MYNAMESPACE).

Теперь попробуем создать глобальную переменную 'a' и вывести ее в нашем пространстве имен.

var a = 5;
const  MYNAMESPACE = (function(){
    console.log(a);
})();

Как видите она выводится! То есть все глобальные переменные и функции будут доступны в пространстве имен.

Теперь рассмотрим следующий пример:

var a = 5;
function summa(a, b){
  return a + b;
}

const  MYNAMESPACE = (function(){
        var a = 3;
        var b = 4;
        function summa(...params){
            var n = 0;
            for(var param of params){
              n += param;
            }
            return n;
        }
        console.log(summa(a, b));
  })();

В глобальном контексте у нас используется переменная 'a' и функция сложения "summa()". Обратите внимание что в пространстве имен у нас также есть переменная и функция с аналогичным названием. Причем никакого конфликта с глобальным контекстом нет. Это одно из преимуществ пространства имен что мы можем использоваться уже существующие названия функций и переменных не опасаясь конфликтов(ошибок).

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

var a = 5;
const  MYNAMESPACE = (function(){
        var a = 3;
        var b = 4;
        function summa(...params){
            var n = 0;
            for(var param of params){
              n += param;
            }
            return n;
        }
        return {
          a: a
        };
  })();
  console.log(a);
  console.log(MYNAMESPACE.a);

Здесь мы выводим в консоль переменную 'a' из глобального контекста и из пространства имен. Обратите внимание чтобы вывести переменную из пространства необходимо в анонимной функции сделать ее возврат по ключу. Если здесь мы попробуем вывести переменную 'b' (MYNAMESPACE.b) или вызвать функцию 'summa()' (MYNAMESPACE.summa()) в глобальном контексте, у нас произойдет ошибка, так как мы не сделали возврата.

Чтобы в глобальном контексте получить доступ ко всем аргументам и функции пространства имен 'MYNAMESPACE' необходимо написать так:

const  MYNAMESPACE = (function(){
      var a = 3;
      var b = 4;
      function summa(...params){
          var n = 0;
          for(var param of params){
            n += param;
          }
          return n;
      }
      return {
        a: a,
        b: b,
        summa: summa
      };
})();
console.log(MYNAMESPACE.summa(MYNAMESPACE.a, MYNAMESPACE.b));

В данном примере мы смогли воспользоваться всем функционалом и переменными пространства имен 'MYNAMESPACE' в глобальном контексте.

Рассмотрим передачу параметров в пространство имен.

var a = 3;
const  MYNAMESPACE = (function(a2){
      var a = 5;
      console.log(a, a2);
})(a);

В качестве параметра была передана глобальная переменная 'a', в нашем пространстве она инициализирована как 'a2'. Обратите внимание что в MYNAMESPACE есть уже переменная 'a' то есть теперь мы можем использовать две переменных 'a' в нашем пространстве. Здесь следует учитывать что параметры которые передаются в пространство должны быть инициализированы до его создания.

В завершении данной статьи хочу сказать что глобальный контекст также имеет свое пространство имен которое называется 'window'.

Пример:

var a = 3;
function summa(){
  console.log('Функция пространства имен window');
}
const  MYNAMESPACE = (function(){
  var a = 5;

  function summa(){
      console.log('Функция пространства имен MYNAMESPACE');
  }
  console.log( window.a);
  window.summa();
})();

Здесь из пространства имен 'MYNAMESPACE' мы обратились к глобальному пространству имен 'window' воспользовавшись его переменной 'a' и функцией 'summa()'.

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

Не забывайте подписываться на группу Вконтакте и переходите на канал Youtube.

Всем удачи! Пока.

Оцените статью:

Статьи

Комментарии

Внимание!!! Все комментарии проходят модерацию перед публикацией!

В данном разделе пока нет комментариев!

Реклама

Запись экрана

Данное расширение позволяет записывать экран и выводит видео в формате webm