Załóżmy, że mamy klasę “car”. Tworzymy obiekt podpinając go do cars[0]. Mamy także klasę “engine”, a obiekty tej klasy są obiektami należącymi do obiektów klasy “car”.
Można stworzyć tablice obiektów i będzie to wtedy wyglądać tak:
app.cars[0].engines[0]
Wtedy dość wygodnie będzie się iterować po tych obiektach, jako elementach tablicy, a elementy tablic będą wliczane we właściwość “length”.
Może jednak to wyglądać czytelniej dla człowieka, poprzez np. tworzenie obiektów klasy cars oraz klasy engines i przypięcie ich nie do cars[0] i engines[0], a np. cars[“Citroen”] oraz engines[“2.0”].
app.cars["Citroen"].engines["2.0"]
No i w ten sposób bez żadnego wyszukiwania można odwołać się po nazwie do konkretnego auta oraz jego silnika, metodą brzmiącą mniej więcej tak:
app.getEngine("2.0", "Citroen")
gdzie pierwszy parametr to silnik, a drugi to (tu z grubsza) nazwa samochodu. W przypadku funkcji podanej w pierwszym kawałku kodu wyglądałoby to mało atrakcyjnie, bo tak:
app.getEngine(0,0)
Obydwa rozwiązania można ze sobą pogodzić, np. poprzez stworzenie referencji, mniej więcej tak:
app.cars["Citroen"].engines["2.0"] = app.cars[0].engines[0]
Dość proste, oszczędzające pamięć rozwiązanie. Tutaj jednak zaśmiecamy tablice obiektów, bo nie dość, że mamy element 0 w tablicy “cars”, to mamy też element “Citroen”, który przechowuje, jak dobrze rozumiem - referencje. Jednak wartość “length” uwzględnia tylko elementy posiadające indeks, więc jeżeli chodzi o length - problemu nie ma.
A może stworzyć osobną tablicę z referencjami np. carsNames? Oprócz tych pytań wyżej, jak i w tytule tematu, mam jeszcze jedno istotne dla mnie pytanie: czy nie jest to temat poświęcony na pierdołę i może mogę zrobić jak mi się podoba, a nie będzie to robić wielkiej różnicy w przyszłości?
EDIT: Oczywiście nazwa auta dla danego elementu tablicy np. cars[0] zawierałaby się także jako właściwość obiektu tablicy, czyli np. cars[0].name == “Citroen”.