- PVSM.RU - https://www.pvsm.ru -
Несмотря на то, что в JavaScript нет встроенной работы с классами или пространствами имен, для JavaScript есть разные библиотекеи, восполняющие эти проблелы, позволяющие писать в таком стиле:
var MyClass = new Class({
myMethod: function() { }
});
var MyNamespace = {
myFunction : function() { return 10; }
}
MyNamespace.myFunction();
Однако такой подход имеет ряд недостатков:
Для того, чтобы побороть оба этих недостатка, я построил библиотеку-обертку вокруг MooTools [1], реализующую маленький «встраевыемый язык» для описания классов/пространств имен следующим образом:
namespace('my.namespace', function() {
function myPrivateOutputFunction(text) {
console.log(text);
}
var myPrivateVariable = 'Hello ';
fun('test', function(name) {
myPrivateOutputFunction(myPrivateVariable + name);
});
});
namespace('my', function() {
namespace('namespace', function() {
clazz('MyInternalClazz', function() {
fun('test', function() {
my.namespace.test('new syntax for OOP!');
});
static_fun('test2', function() {
my.namespace.test('Static function');
});
});
});
});
var instance = new my.namespace.MyInternalClazz;
instance.test();
my.namespace.MyInternalClazz.test2();
Как видно из кода, библиотека позволяет использовать составные имена для пространств имен через точку как альтернативу вложению определений пространства имен. Описания пространств имен с одинаковымм полными именами «объединяются».
Библиотеку выложил на GitHub [2]. Никаких особых нанотехнологий в ней нет (<100 строк), просто я нигде не видел такого способа описания пакетов/классов, который мне кажется удобным, потому и решил поделиться с сообществом.
Библиотеку тривиально научить работать с реализациями ООП отличными от MooTools слегка модифицировав метод build в «классе» _ClassDecl. Да и вообще, ее можно использовать безо всякого ООП просто из-за реализации пространств имен.
Автор: meta4
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/4260
Ссылки в тексте:
[1] MooTools: http://mootools.net/
[2] GitHub: https://github.com/daniilguit/oopish
Нажмите здесь для печати.