No to jak z kropką, to Proxy.
BTW kto dał ci takie zadanie? Bo tego typu wytyczne ma się opierać na kompozycjach i dziedziczeniu.
są dość nierozsądne. To ty powinieneś wiedzieć, jak to zaimplementować, bo od tego jest programista, żeby dokonywać wyboru, a nie gostek, który palcem nie ruszy, tylko mówi, że ma być tak i tak, mimo, że lepsza implementacja może być zupełnie inna niż się komuś na górze wydaje.
Wymaganie co do kropki z kolei jest już bardziej sensowne, bo to wymóg konkretnego kształtu API. Z drugiej strony też należałoby się zastanowić, czy API w stylu el.div.div.span("test")
jest sensowne. Co jeśli będziesz chciał mieć dwa elementy span w divie?
<div>
<span>abc</span>
<span>def</span>
</div>
jak to zrobisz za pomocą samych kropek, jeśli ta notacja zakłada jak rozumiem, że tylko jeden element potomny może istnieć w danym elemencie? Jeśli div.div.span("abc")
zwraca już stringa, to nie zrobisz div.div.span("abc").span("def")
, zresztą to by nie było logiczne, skoro notacja jest taka, że po kropce masz wejście do elementu potomnego, a chcesz uzyskać rodzeństwo.
Chyba, żeby zmodyfikować API, żeby przyjmował tablice:
div.div([span("abc"), span("def")])
Ale jak iść dalej, to po co w ogóle jakieś kropki, bardziej praktyczniej byłoby zrobić API mniej więcej takie:
const html = div(
div(
span("abc"),
span("def"),
)
)
Oczywiście wiem, że takie masz wytyczne, ale cóż, miej świadomość, że ten, kto to zlecał, nie przemyślał tego dobrze. Aha i bycie jakimś nauczycielem czy wykładowcą go nie tłumaczy, bo tym bardziej powinien uczyć praktycznego podejścia, a nie uwsteczniać swoich uczniów przez dawanie z d... wymagań. Z drugiej strony samo zadanie (pomijając narzucony z d**y sposób implementacji) jest ciekawe. Zrobiłem je w JS, a potem próbowałem odtworzyć rozwiązanie w Rust, którego teraz się uczę.