parser


 

 
   команды управления поиском

У меня зато есть реальный пример.

andylars 11.09.2016 07:54 / 11.09.2016 08:02

В практике:

Потребность в прототипном поведении внезапно и остро появлятся в плоскости шаблонизации/интерфейсного движка - если вы пойдете путём компонент! (неудивительно что и js живущий как раз в области UI, именно поэтому имеет такую ООП-парадигму).

Для реализации пришлось писать свой костыль-оператор prototype, который клонирует от прототипа одноименный класс, добавляя постфикс, и скрывая за обёрткой реализацию.
(кстати не делает ли то же самое PF:Templet? это ж ведь тоже workaround из-за отстуствия нативного прототипного поведения).

В общем, в процессе создания именно компонентного serverside responsive-движка (набирающий с 2006 года подход, известный как RESS) появляются потребности в такой модели. Плюс одноименные компоненты разложены на коллекции (это могут быть и темы и mobile/desktop и legacy/html5ready) и в процессе инициализации объекта Render'a класс подгружает последвательно каскад коллекций и объект собирается из разных версий одноименных классов.

И понятно, что в не_прототипном варианте - подгруженная версия одноименного класса "портит" все методы у всех других объектов, и приходится воротить обёртки с порождением нового класса.
Другое дело - что это вообще-то не сложно, и с другой стороны не добавляет кажется доп.накладных расходов. По крайней мере в пространстве классов - так даже легче отследить в reflection все версии, чем понимать сколько версий этого класса живет теперь.

Технический аспект:
По большому счету, и технически де-факто - объектом на основе прототипа - уже является синглтон - статический класс-объект. Нужно породить новый объект на основе прототипа? ^process-им новый статический класс от базового плюс любые свои методы. Имя нового класса - будет уникально, т.к. он уникальный объект-синглтон.


Просто не надо бояться странного (синглтон он и есть прототипный объект):
$uniq_classobject:some_field[]
^uniq_classobject:some_method[]
Другое дело, что породить это красиво без ^process-а пока нельзя