#framework #javascript
Доброго времени суток.
Задался я целью на работе - избежать использования такого фрэймворка как QOOXDOO.
Он, конечно, классный и прикольный, но, к сожалению, и питон нужен для компиляции
кода (да-да, чтобы собрать воедино код, нужен Питон), а еще он весит 100500 метров.
В общем, старался обойти без потерь для текущего проекта. Получилось вроде бы.
Из возможностей:
Возможность создания класса и его экземпляров.
Текущие типы классов, возможные для создания - динамический, синглтон.
Возможность "подмешивания" методов сторонних классов (МИКС).
чОткое наследование
Автоматическое создание Геттеров, сеттеров и листинга и контроля типов для публичный
переменных.
Возможность создания статических методов вне статических классов.
оооооОоОооочень маленький.
Текущие недоработки (будут исправлены в течении пары дней...когда высплюсь):
Нет возможности наследования синглтона. (функции написаны, но начинку не пихал. Там
все просто)
Пример простейшего класса:
// Mixin class
smc.define("MTest", {
// Static methds & properties
static: {
base: 0x100,
unit: 0x200,
resouce: 0x300
}
});
// Mixin class
smc.define("MTest2", {
// Static methds & properties
static: {
moto: 0x100,
auto: 0x200,
velo: 0x300
}
});
smc.define("MyFirstClass", {
/*
* Конструктор. Вызывается при создании нового экземпляра класса.
*/
construct: function (a,b) {
if(a) this.setName(a);
if(b) this.setMessage(b);
this.helloWorld();
},
/*
* Это примесь. Вы можете создать массив и указать SMC классы,
* чьи свойства необходимо подмешать в текущий объект класса.
* Если такие классы есть - Вы сможете вызвать их методы, из текущего экземпляра,
* либо обратится к их переменным
*/
mixins: [
smc.MTest,
smc.MTest2
],
/*
* Это паблик- переменные класса.
* value: Значение переменной
* type: тип переменной (дефолт- любой)
* event: Если при изменении значения переменной необходимо вызвать какую-либо
функцию,
*/
properties: {
name: { value: "Станислав", type: "string" },
message: { value: "Привет", type: "string", apply: "this.helloWorld" }
},
/*
* Список паблик функций, либо переменных
* (как правило, сюда забрасываются переменные, которые не нуждаются в паблик
доступе)
*/
members: {
helloWorld: function () {
alert( this.getMesage() + ", " + this.getName());
}
},
static: {
whatAreFuck: function () { console.log("Это простой статический метод
у динамического объекта. Может вызываться без создания экземпляра класса") }
}
});
Скачать его можно пройдя по этой ссылке :)
http://download.tracking.by/smc.js
Ответы
Ответ 1
:) ЗАчетно, действительно, ничего тяжелого :) Но есть и нюансы. 1. Сразу бросилось в глаза с примером создания Юзера и Админа. Практически копипаст содержания одного объекта и второго. Думаю, никто не возразит, если я скажу, что это немного некрасиво :) Ну да ладно, тут дело вкуса, не имею права ничего говорить :) Вот, хотел обратить внимание на фразу : " сеттеры, геттеры и т.д и т.п. не стал т.к. не считаю целесообразным ( надо будет - можно написать "класс" с этим функционалом от которого, потом, расширять все )." Не стоит расширять функционал за счет таковых лесапедов :) Тут фишка в чем. Почему я задался вопросом о реализации сеттеров и геттеров - очевидно. Можно запросто контролировать типы переменных (а порой это очень важно) Не придется писать к каждому геттеру и сеттеру функции всякие познавательные :) Как говориццо "Все уже сделано до нас:)" ... да и размер кода существенно уменьшается. :) У меня просто позиция такая - чем больше сделаешь сейчас - тем меньше потом делать всего :)Ответ 2
И что, вот так можно вызвать функцию? MyFirstClass::whatAreFuck(); А вообще круто.
Комментариев нет:
Отправить комментарий