go.js 0.2 - Эмуляция "классов" - Наследовение - Связывание методов с контекстом объекта - Доступ к цепи предков и предыдущим реализациям методов - Статические методы, абстрактные классы, разрушение объектов Брать здесь или клонировать тут
Используй GitHub вместо GoogleCode, очень рекомендую. Сам изначально использовался GC, но в итоге таки передел на GH и ни грамма не жалею. Там сообщество, там куча возможностей, там - намного круче. По теме - интерфейс не очень нравится. Статик - вообще не нравится, абстракт - тоже, вызов родительского метода - аналогично. У Мутулз решение куда более удачное. "Статик" лучше сделать через мутатор, суть абстракт не в флаге, а в абстрактных методах, а родительский метод можно глянуть в Мутулз. В итоге: [js]var MyClass = Class({ Static: { staticMethod: function() { } }, initialize: function () { // constructor }, dynamicMethod: function () { }, abstractMethod: Class.abstract });[/js]
TheShock, спасибо за отзыв! Да, я всё собираюсь. Но сначала нужно побороть лень и перейти на git, а потом опять побороть лень и перейти на GitHub. С мутулзом плотно не работаю и, наверное, где-то ошибаюсь, но попробую немного постоять на своей позиции. У самого мутулза решения (binds, static) вообще нет. Это решение нужно собирать из плагинов. Static'а вообще что-то не нашёл. С точки зрения интерфейса мутатор/не мутатор, это ИМХО вкусовщина. В тех языках, которые я пытался пародировать все методы идут одним списком: и статические и динамические. Статические, обычно, помечаются модификатором static (у меня его роль выполняет суфикс). Через мутатор же - метод в одном месте, его атрибуты в другом. Интересно узнать какой это метод - нужно листать наверх, искать мутатор (а то и в родительский класс лезть). Моему ИМХУ это не по душе. В моей предыдущей версии так же были абстрактные методы. И так же Class.abstract Исключение при вызове. Плюс ещё сканился весь список методов и если есть абстрактные, но класс не помечен абстрактным, то бросалось исключение. В этой версии подумал, что нафиг нужны эти телодвижения при том, что практически этим не пользуюсь. Родительский метод с одной стороны красив, с другой стороны слишком много магии за ним. Все мои функции, которые я так старательно описывал, на самом деле внезапно оказываются не мои функции, а какие-то врапперы над ними. И this.parent() это не конкретный метод, а непойми что. Я решил остаться чуть поближе к корням ). Вызов чуть длинее, но с учётом того, что он достаточно редок, это не так важно.