Шаблон пространства имен JavaScript (аналогичен свойствам объектов)

#javascript #namespaces #design-patterns

#javascript #пространства имен #дизайн-шаблоны

Вопрос:

какова цель такого шаблона?

 var ns=function(){
  //do some stuff
}

ns.test=function(){
  //do another stuff
}
  

Я видел код, похожий на этот, но я не понимаю преимуществ такого шаблона.

Также кажется, что это похоже на свойства объектов.

также этот шаблон несколько раз использовался с замыканиями, и кажется, что jquery использует его, но не уверен в этом.

Спасибо!

Ответ №1:

Во-первых, это гарантирует, что имена ваших переменных и функций не будут конфликтовать с именами из других скриптов, которые могут быть включены (например, реклама, аналитика, библиотеки, у которых нет пространства имен и т.д.).

Комментарии:

1. значит, эти две функции технически не относительны друг к другу?

2. Ну, способ, которым это работает, заключается в том, что ns — это функция (и объект, поскольку функции в Javascript первоклассны), и он закрывается поверх других свойств, таких как ns.test , который также является функцией. Таким образом, функциональный тест принадлежит объекту ns.

Ответ №2:

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