[JS] Jak nazwać obiekt?


(DawidMikulski) #1

Mam raczej banalny problem w JavaScript, otóż potrzebuje stworzyć kilka obiektów w pętli a następnie wywoływać metody na tych obiektach. Poniżej napisałem kod który powinien przybliżyć to co mam na myśli.

<p id="pTekst"></p>
<script>
var mezczyzni = ["Mieczyslaw", "Wojciech", "Andrzej"];

function osoba(imie) {
    this.imie = imie;
	this.zmienImie = function (name) {
        this.imie = name;
    }
	this.pokaz = function (){
		document.getElementById("pTekst").innerHTML = this.imie + ' <button onClick="mezczyzna.zmienImie(\'Marek\');mezczyzna.pokaz()">Zmien imie na Marek</button>'
	}
}
for (i = 0; i < mezczyzni.length; i++) {
	var mezczyzna = new osoba(mezczyzni[i]);
	mezczyzna.pokaz();
}
</script>

Jak widać w powyższym kodzie w pętli tworzone są obiekty o takiej samej nazwie, więc tak naprawdę się nadpisują i koniec końców mam dostęp tylko do ostatniego obiektu.

Wiem, że ten problem można ominąć dynamicznym tworzeniem nazw obiektów, ale nie wydaje mi się to profesjonalnym rozwiązaniem, dlatego chciałbym zapytać jak inaczej to rozwiązać?

Pozdrawiam i proszę o pomoc :slight_smile:


(Fizyda) #2

Rozwiązaniem Twojego problemu są tablice (array).


(kowgli) #4
var osoby = [];

for (i = 0; i < mezczyzni.length; i++) {
	osoby.push(new osoba(mezczyzni[i]));
	osoby[i].pokaz();
}

(DawidMikulski) #5

Właśnie o takie rozwiązanie mi chodziło.
Jeszcze jedno, krótkie pytanie, gdybym chciał znaleźć obiekt który zawiera daną wartość najlepiej posługiwać się Array.find() ?


(Apostoł) #6

Pewnie raczej bardziej będzie Ci pasować IndexOf() do tego. Zresztą porównaj sobie te dwie rzeczy. No i zawsze możesz dla treningu przejechać forem ;]