| Autor | Zpráva | ||
|---|---|---|---|
| Misha Profil * |
#1 · Zasláno: 7. 9. 2014, 19:29:39
U funkce Reverse jsem se setkal s něčím, u čehož si nejsem jist, že by to tak mělo opravdu fungovat. A tak bych potřeboval trochu poradit a poučit.
<script type="text/javascript">
function navig() {
var poziceElementuR = new Array(); // vytvoření lokální proměnné
poziceElementuR = poziceElementu; // zkopírování obsahu proměnné
poziceElementuR = poziceElementuR.reverse(); // otočení obsahu proměnné
document.write(poziceElementuR.join()); // vypíše obrácený obsah pole
document.write(poziceElementu.join()); // také vypíše obrácený obsah pole
// navíc pokud funkci provedu 2x, tak se pořadí střídá (jako by proměnná poziceElementuR byla globální)
}
poziceElementu = new Array(); // vytvoření globální proměnné
poziceElementu[0] = 251;
poziceElementu.push(9);
poziceElementu.push(65487);
navig();
</script>Umíte mi to někdo vysvětlit? Nebo kde dělám chybu, když chci aby v proměnné poziceElementuR bylo pořadí obrácené, ale v poziceElementu nebylo? |
||
| Davex Profil |
#2 · Zasláno: 7. 9. 2014, 20:12:28
Není to způsobeno metodou
reverse(), ale tím, že nová proměnná je pouze referencí na původní pole. Pro zkopírování pole můžeš použít kód
poziceElementuR = poziceElementu.slice(); |
||
| Joker Profil |
#3 · Zasláno: 7. 9. 2014, 20:14:05
Misha:
„Umíte mi to někdo vysvětlit?“ Ano. „Problém“ není v metodě reverse, ale v operátoru =.
Totiž přiřazení objektu někam nevytvoří kopii, ale referenci. Tzn. poziceElementuR = poziceElementu; nevytvoří kopii objektu poziceElementu, ale z poziceElementR udělá referenci na poziceElementu, takže ve skutečnosti existuje pořád jen jeden objekt, nad kterým se ty operace dělají.
Je třeba vytvořit kopii pole, poziceElementuR = poziceElementu.slice(0);
Ještě poznamenám, že není dobrý nápad takhle používat globální proměnné, lepší by bylo, aby poziceElementu byla parametr funkce navig. |
||
|
Časová prodleva: 12 let
|
|||
0