Czytałem trochę o modelu dziedziczenia coffeescript i mam wrażenie, że jestem na marginesie ideologicznej debaty, której naprawdę nie rozumiem. Byłbym więc szczęśliwy, gdyby dowiedziałem się, że robię wszystko w niewłaściwy sposób.Metody statyczne i dziedziczenie w Coffeespcu
Zasadniczo robię to, pisząc zestaw widżetów, które, między innymi, muszą obsługiwać zdarzenia na swoich elementach DOM. Pomyślałem, że dobrym sposobem na zrobienie tego byłoby posiadanie metody klasy, która byłaby wywoływana raz, aby delegować wszystkie zdarzenia, które widżet może potrzebować. Podstawowa klasa widgetów może mieć kilka prostych procedur obsługi kliknięć, podczas gdy podklasa może dodać do niej niektóre procedury obsługi kursorów myszy lub dodatkowe moduły obsługi kliknięć.
Jednak wydaje się, że nie powinienem próbować wykonywać równoważnego wywołania super()
wewnątrz metody statycznej. Istnieje obejście, które istnieje, (this.__super__.constructor.METHODNAME()
, ale widziałem wiele sugestii, że nie jest to najlepszy sposób, aby zrobić to, co próbuję zrobić. Czy ktoś ma jakieś informacje na temat tego, jak powinienem zbudować ten kod? korzystając z obejścia lub umieszczając całą delegację w zupełnie innym miejscu? Nie mogę tak po prostu włożyć go do prototypu, ponieważ niekoniecznie będę miał instancję do wywołania tej metody (lub czy w zasadzie wciąż będę mógł nazywać metodę ? na prototypie od statycznego kontekstu, jak oddanie SwatchableWidget.prototype.delegateEvents()
do funkcji onload lub coś
Oto fragment kodu do zilustrowania tego, co mówię:
class Widget
@testProp: "ThemeWidget"
@delegateEvents: ->
console.log "delegate some generic events"
class SwatchableWidget extends Widget
@testProp2 = "SwatchWidget"
@delegateEvents: ->
console.log "delegate some specific swatchable widget events"
this.__super__.constructor.delegateEvents()
Widget.delegateEvents()
SwatchableWidget.delegateEvents()
Dzięki za wszelkie Hel str.
mi się podoba, ale to każda klasa pochodna wymagane byłoby jawnie wywołać to nadrzędne zdarzenia klasy delegata. Jeśli nazwy klas nadrzędnych zostaną zmienione, zdarzenia delegatów i podobne wywołania będą musiały zostać ręcznie zaktualizowane.Odzyskując moją własną odpowiedź, wciąż nie znam czystego sposobu automatycznego wywoływania, jak funkcje nazwane u rodziców, poza tym, co sugeruje autor pierwotnego pytania. –