Цитата:
|
Очередное обновление.
Немного оптимизирован код, исправлены пару мелких багов. Добавлены возможности. Теперь можно создавать классы любой вложенности, например:
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, то загрузка остальных файлов продолжится не смотря на ошибку.
// В противном случае загрузка файлов не будет продолжена.
})
насчет обработки ошибок тоже вполне возможно будут изменения, но пока не решил как улучшить и т.д.Если есть идеи/пожелания/критика, с удовольствием выслушаю. Спасибо. |
Цитата:
Цитата:
Class("ui.Button", {
// ...
}).extend(Class.ui.fx.Animation);
Пожалусто :) |
Цитата:
Цитата:
Class("ui.Button extends ui.fx.Animation", {
// ...
});
в этом случае класс лишь объявлен, и не имеет экземпляров, а вот когда мы вызываем:new ui.Button();в этом случае происходит наследование, то-есть вызывается создание экземпляра родительского класса. Не раньше. И если делать так как предлагаешь, то я понятия не имею как это реализовать. Хм... Хотя конечно мысль одна есть, попробую над ней подумать. |
B~Vladi,
да кстати я не упоминал наверно, но можно еще и так создавать классы:
Class("ui.Button", ui.fx.Animation, {
// ...
});
а вообще внутри библиотеки указаны примеры создания:/* * Class( context, "className", parentClass, staticObject, classStructure ) * Class( context, "className", parentClass, classStructure ) * Class( context, "className", staticObject, classStructure ) * Class( context, "className", classStructure ) * * Class( "className", parentClass, staticObject, classStructure ) * Class( "className", parentClass, classStructure ) * Class( "className", staticObject, classStructure ) * Class( "className", classStructure ) * * Class( parentClass, staticObject, classStructure ) * Class( parentClass, classStructure ) * Class( staticObject, classStructure ) * Class( classStructure ) */аж 12 вариантов:
// первый параметр контекст в котором будет создан класс
// второй имя класса
// третий конструктор класса от которого хотим наследоваться
// четвертый объект со статическими свойствами, которые будут доступны без создания экземпляра, через Foo.STATIC_PARAM
// пятый, собственно сам класс
Class( window, "Foo", Bar, {
"STATIC_PARAM": "hello"
}, {
constructor: function() {
}
});
// все что выше но без статического объекта
Class( window, "Foo", Bar, {
constructor: function() {
}
});
// все что выше но без наследования, и со статическими параметрами
Class( window, "Foo", {
"STATIC_PARAM": "hello"
}, {
constructor: function() {
}
});
// все что выше но без наследования и без статических параметров
Class( window, "Foo", {
constructor: function() {
}
});
остальное описывать не буду, по названиям должно быть понятно. |
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
На крайняк напиши JSDoc, адекватные IDE смогут подсказку показывать налету и не придется открывать исходники. |
Цитата:
|
Цитата:
JSDoc - версия JavaDoc для JS. Сайт проекта реализации на Java. В твоём случае нужно заменить комментарий на: /* * @name Создатель НАСТОЯЩИХ классов в JS!!11 0_o * @example * Class( context, "className", parentClass, staticObject, classStructure ) * Class( context, "className", parentClass, classStructure ) * Class( context, "className", staticObject, classStructure ) * Class( context, "className", classStructure ) * * Class( "className", parentClass, staticObject, classStructure ) * Class( "className", parentClass, classStructure ) * Class( "className", staticObject, classStructure ) * Class( "className", classStructure ) * * Class( parentClass, staticObject, classStructure ) * Class( parentClass, classStructure ) * Class( staticObject, classStructure ) * Class( classStructure ) */ В IDE от JetBrains доку можно смотреть по Ctrl+Q. Вот пример сгенерированной доки. |
| Часовой пояс GMT +3, время: 18:28. |