#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 функции являются первоклассными объектами со своими собственными свойствами и методами. Это позволяет функциям выполняться самим по себе, но также имитировать вещи на других языках. Это позволяет вам делать некоторые довольно мощные вещи, такие как имитация статических классов, запоминание, пространство имен и т.д.