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”.

Przykład wydajnościowy:
Oszczędzę trochę dalszych dyskusji na ten temat: nieistotne jest dla mnie czy będzie to (faktycznie) obiekt przechowujący inne obiekty, czy tablica pseudoasocjacyjna z kluczami nazwanymi przechowująca jako wartości inne obiekty. Celowo dlatego też nazywam ją pseudoasocjacyjną. Na upartego można ująć, że zwykła indeksowana tablica przechowująca stringi, tak naprawdę przechowuje obiekty… typu string. Jednak plus dla Ciebie za pozostałą część posta, bo widzę przydatne informacje, jak sposoby na przyspieszenie wyszukiwania czy już wcześniej też w Twoich postach - informacja o “mapach”. Na ten moment zależy mi na kompatybilności i klasycznym podejściu tzn. prototypy i brak właściwości prywatnych, bo są mi w sumie zbędne, ale będzie na przyszłość