Очередное обновление.
Немного оптимизирован код, исправлены пару мелких багов. Добавлены возможности. Теперь можно создавать классы любой вложенности, например:
Class("ui.fx.Animation", {
// ...
})
данный класс будет доступен как
ui.fx.Animation, так же можно и расширять классы:
Class("ui.Button extends ui.fx.Animation", {
// ...
})
создастся класс
ui.Button с унаследованными свойствами от
ui.fx.Animation.
Следующее нововведение это возможность объявлять классы совершенно в любом порядке. То-есть ранее нужно было учитывать порядок. Например нужно было перед объявлением класса
ui.Button объявить класс
ui.fx.Animation. Но теперь можно сначала объявить класс
ui.Button а уже потом где-то ниже или подключить позже класс
ui.fx.Animation, при этом все будет работать корректно. Наглядный пример:
<script type="text/javascript" src="https://github.com/devote/jsClasses/raw/master/core.class.min.js"></script>
<script>
Class( "Foo extends Bar", {
test: function() {
return this.name;
}
});
Class( "Bar", {
name: "Vasya"
});
alert( (new Foo()).test() );
</script>
Есть возможность отключить кеширование файлов при использовании
Class.imports, достаточно где-то в начале кода установить значение:
Class.imports.disableCaching = true;
и все загружаемые файлы всегда будут вновь загружаться с сервера, это удобно для отладки кода.
Так же можно перехватить ошибку загружаемого модуля, допустим при создании экземпляра класса не удалось найти класс от которого нужно наследоваться, в этом случае сработает событие
Class.autoload, пример:
<script type="text/javascript" src="https://github.com/devote/jsClasses/raw/master/core.class.min.js"></script>
<script>
Class( "Foo extends Bar", {
test: function() {
return this.name;
}
});
Class.autoload = function( className ) {
alert( "Не найдет класс " + className + " в контексте " + this );
// тут можно вернуть конструктор другого класса например:
return Class({
name: "Petya"
});
// или же просто загрузить нужный класс, но в синхронном режиме
// либо ничего не возвращать, что приведет к останову скрипта
}
alert( (new Foo()).test() );
</script>
честно говоря над методом
Class.autoload нужно еще поработать, мне конечно не совсем пока нравится как это работает. Поэтому в будущих версия этот метод возможно претерпит изменения.
Так же забыл сообщить о том что при использовании метода
Class.imports можно перехватить ошибку загрузки, пример:
Class.imports([
"somefile.js",
"somefile2.js"
], function(){
// succes loaded
}, function( status, url ) {
alert( "Ошибка загрузки файла: " + url + ", статус ошибки: " + status );
// если вернуть значение true, то загрузка остальных файлов продолжится не смотря на ошибку.
// В противном случае загрузка файлов не будет продолжена.
})
насчет обработки ошибок тоже вполне возможно будут изменения, но пока не решил как улучшить и т.д.
Если есть идеи/пожелания/критика, с удовольствием выслушаю.
Спасибо.