Как стать автором
Обновить

Комментарии 7

очень красиво
Figure.__proto__ = FigureMeta.prototype;

очень удобно
this instanceof arguments.callee? this: {__proto__: arguments.callee.prototype});

и главное негде ошибиться
Раз уж пошла такая пьянка, вот моя реализация классового ООП на JS: github.com/shergin/legacy
В частности, там работают такие плюшки как this.$base и this.$super.
Эти плюшки, кажется, работают ещё у Дина Эдвардса в его Base2, у Дмитрия Филатова и ещё думаю у нескольких сотен людей ;) Хочется процитировать Дина:

Just what the world needs, another Javascript library.

=)
Эх, не обновлял страницу, опередили… Хотя плагинами доставлять наследование — совсем не то же самое что в рамках шибко популярного фреймворка;)
Да, мы это обсуждали, вот в этом треде (http://stdafx.ya.ru/replies.xml?item_no=1921), и в частности с Димой Филатовым, вот моя цитата оттуда:
Моя отличается простотой и логичностью, конечно-же! У меня для каждого метода не создается свой теневой this.base(), вместо чего один единственный base на лету определяет откуда он вызван (arguments.callee.caller — такого я не видел ни у кого!), затем, на основании этого, определяет базовый класс и ваще делает всю магию. Кроме этого есть метод this.super(), который примерно также возвращает ссылку на базовый прототип. И самое главное — все это основывается на том, что каждая функция помнит как ее зовут и какому классу она принадлежит, эти ссылки прямо прописываются в объект function (такого я тоже ни у кого не видел, хотя реализация стандарта в фаерфоксе прямо предполагает наличиет проперти name у функции). Мне кажется это более честно и в наибольшей мере соответствует логике работы «раннего связывания» в си++.
Спасибо, полезный материал.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории