Portál AbcLinuxu, 14. května 2025 16:55

Dotaz: javascript: vlastnost náhodně vybraného objektu

2.9.2016 16:00 mica
javascript: vlastnost náhodně vybraného objektu
Přečteno: 357×
Odpovědět | Admin
Zdravím, potřeboval bych pomoct s následujícím:

Mám devět objektů se dvěma vlastnostmi a potřebuju náhodně vybrat jeden objekt a zobrazit hodnotu jeho jedné vlastnosti. Jména objektů jsem dal do pole a z něj dokážu náhodně vybrat jeden objekt, ale už nevím, jak zobrazit konkrétní vlastnost takto vybraného objektu. Poradí někdo?

Schematicky to mám takto:
function objekt(vl1, vl2) {
	this.vlastnost1 = vl1;
	this.vlastnost2 = vl2;
}
var osoba1 = new objekt ("něco", "něco jiného");
var osoba2 = new objekt ("hodnota", "jiná hodnota");
atd.
var rada = ["osoba1", "osoba2", atd.];
function vyberObjekt() {
	var x = Math.round(Math.random()*10);
	var nahodnaOsoba = rada[x];
	if (x<(rada.length)-1) document.getElementById("zobraz").innerHTML = ??? (tady nevím, nahodnaOsoba.vlastnost1 vrací undefined)
}

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

2.9.2016 16:57 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: javascript: vlastnost náhodně vybraného objektu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tohle v javascriptu funguje jinak, this je reference na kontext v okamžiku volání, nikoli na obklopující kód v definici (javascriptaři jistě opraví moje nedokonalé názvosloví). A objekt se dělá obvykle tovární metodou, resp. je více způsobů. Šlo by to řešit třeba takto (spustit třeba ve Firefoxu ve scratchpadu - F12):

function objekt(vl1, vl2){
    var a = vl1;
    var b = vl2;
    var x = function(v){
        console.log(v)
    };
    return {
       jmeno: a,
       prijemni: b,
       kontext: this,
       metoda: x
    };
};

var osoba1 = objekt("Jan", "Novak");
var osoba2 = objekt("Petr", "Cerny");

var rada = [osoba1, osoba2];
var osoba = rada[1];

console.log('---> ' + new Date());
console.log(rada);
console.log(osoba);
console.log(osoba.prijemni);
console.log(osoba.kontext);
console.log(osoba.metoda('Hu!'));
console.log('<---');
-- OldFrog
3.9.2016 10:43 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: javascript: vlastnost náhodně vybraného objektu
Použití this je v tom příkladu správně a objekt se tam vytváří tak, jak se v JavaScriptu vytvářet má (operátorem new). Těch "více způsobů" se používá, když se někdo snaží v JavaScriptu prototypovou dědičnost nahradit emulací tříd.
4.9.2016 15:14 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: javascript: vlastnost náhodně vybraného objektu
Máte pravdu, při new je ekvivalentní zápisu {} a kontext zafixuje.

Asi bude nejlepší jít rovnou ke zdroji, kde to jsou varianty rozebrané:
-- OldFrog
4.9.2016 15:23 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: javascript: vlastnost náhodně vybraného objektu
Ještě doporučím tenhle příspěvek na StackOverflow
-- OldFrog
3.9.2016 14:56 mica
Rozbalit Rozbalit vše Re: javascript: vlastnost náhodně vybraného objektu
Děkuju za funkční řešení, nicméně bych se ještě zeptal, proč to moje nefungovalo. Jen dodám, že to, jak jsem vytvořil "šablonu" (ať se tomu oficiálně říká jakkoli) a pak nové objekty podle ní, je uvedeno v různých materiálech, to jsem si nevymyslel já.
3.9.2016 15:01 mica
Rozbalit Rozbalit vše Re: javascript: vlastnost náhodně vybraného objektu
Omlouvám se za dotaz, stránku jsem měl několik hodin zobrazenou, aniž bych ji aktualizoval, odpověděl mi už Filip Jirsák.
Řešení 1× (trilobyte)
3.9.2016 10:40 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: javascript: vlastnost náhodně vybraného objektu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na řádku
var rada = ["osoba1", "osoba2", atd.];
do pole rada nevkládáte vytvořené objekty, ale texty. Jsou tam navíc ty uvozovky. Má to být:
var rada = [osoba1, osoba2, atd.];
Pak už vám bude fungovat to nahodnaOsoba.vlastnost1.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.