Органичные namespace в JavaScript

Работая с большим количеством классов в JavaScript приложении, приходится бороться с засорением глобальной области видимости различными именами классов. Хотя системы импортов частично поправляют ситуацию, хотелось бы иметь решение, позволяющее работать с namespace как это сделано, например, в C++.
Для реализации данного решения мною была подготовлена маленькая библиотечка, позволяющая писать код так:

_namespace = 'SOME.NEW.NAMESPACE'
SOME.NEW.NAMESPACE.MyClass = function {
};
//ES 2015
SOME.NEW.NAMESPACE.MyClass2 = class {
};
_namespace.MyClass3 =… //function / class / anything

Под капотом запись _namespace = 'SOME.NEW.NAMESPACE' равносильна созданию трёх вложенных постранств имен (точка является разделителем). Т.е. данный код примерно равноценен следующей записи:

if(! window.SOME) window.SOME = {};
if(! window.SOME.NEW) window.SOME.NEW = {};
if(! window.SOME.NEW.NAMESPACE) window.SOME.NEW.NAMESPACE = {};

Помимо использования глобальных пространств имен, можно добавлять вложенные пространства имен в уже созданные, например так:

_namespace = 'SOME.NEW'

SOME.NEW.TestClass = function() {

};
_namespace = ".NAMESPACE"//Обратите внимание на точку
SOME.NEW.NAMESPACE.TestClass = function() {

};

Для того, чтобы использовать последнее пространство имен, вместо ОЧЕНЬ.ДЛИННОЕ.ВЛОЖЕННОЕ.ПРОСТРАНСТВО_ИМЕН.Класс можно написать просто _namespace.Класс

Текущее пространство имен можно изменить, обращаясь к переменной _namespace. Ее можно менять и сбрасывать при необходимости, например задав _namespace = window; (сбросить)

Исходный код и минифицированная версия лежат здесь:
github.com/Cabalbl4/js-namespace


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.