Autor | Zpráva | ||
---|---|---|---|
imploder Profil |
#1 · Zasláno: 4. 12. 2008, 16:53:53 · Upravil/a: imploder
Na začátku programu mimo funkce nadeklaruju 3 pole:
var pocet = new Array(); var vlevo = new Array(); var vpravo = new Array(); Není to ve funkci, takže by měly být globální. Pak mám funkci, které je má plnit: function vytvor(jmeno, onastr) { pocet[jmeno] = onastr; vlevo[jmeno] = 1-pocet[jmeno]; vpravo[jmeno] = 1+pocet[jmeno]; } Když v té funkci na konci zavolám alert(vpravo[jmeno]);, ukáže se správné číslo (při vytvor('obr', 6); je to 7). Když ale to samé zkusím v jiné funkci, vyskočí NaN. Jako by ty pole nebyly globální, dostupné ve všech funkcích stejně. Nevíte, čím to může být? |
||
Měsíček Profil |
#2 · Zasláno: 4. 12. 2008, 17:04:30
To se mi nezdá :) mohl by jsi ukázat jak "to zkoušíš v jiné funkci"?
|
||
Chamurappi Profil |
#3 · Zasláno: 4. 12. 2008, 18:09:56 · Upravil/a: Chamurappi
Reaguji na implodera:
Asociativní pole v JavaScriptu neexistuje. Existují jen struktury/objekty, k jejichž členům můžeš přistupovat jako ke členům asociativního pole v jiných jazycích. Nemá smysl inicializovat objekty jako new Array(). Ale to s tvým problémem nesouvisí. Živou ukázku nemáš? |
||
imploder Profil |
#4 · Zasláno: 4. 12. 2008, 21:34:37
Chamurappi
„Živou ukázku nemáš?“ Tady. Nejdřív to hodí vpravo[jmeno] ve funkci vytvor(), kde se prvky pole naplní a pak vpravo[jmeno] ve funkci sipky(), kde se mají číst (jmeno je v obou případech 'obr'). Zkusil jsem upravit stránkovací skript tak, aby umožňoval stránkovat ne jednu, ale neomezeně skupin obrázků - každá se jinak jmenuje a má vlastní nalistovanou stránku a počet obrázků na stránku. Původně tam každá ta proměnná (vlevo, pocet, vpravo) byla jenom jedna a to pole jsem udělal, aby každá skupina obrázků měla svoje. Asi to teda tak nejde, lepší bude udělat skupinu jako objekt a ty proměnné mu dát jako členské. vytvor() tam vlastně nahrazuje konstruktor objektu. |
||
Chamurappi Profil |
#5 · Zasláno: 4. 12. 2008, 22:51:30 · Upravil/a: Chamurappi
Reaguji na implodera:
vlevo[jmeno] = prvni[jmeno]-pocet[jmeno]; vpravo[jmeno] = prvni[jmeno]+pocet[jmeno]; |
||
imploder Profil |
#6 · Zasláno: 4. 12. 2008, 23:56:48
Chamurappi
Bylo to tím. Už to funguje jak má. Nějak jsem tam všude naházel ty indexy a nevšiml jsem si, že i tam, kde nemají být :). Takže pole globální je, není s tím problém. Ty deklarace s new Array() na začátku jsou na to ale potřeba. Dík za pomoc. |
||
Chamurappi Profil |
#7 · Zasláno: 4. 12. 2008, 23:59:38
Reaguji na implodera:
Místo „new Array()“ můžeš psát „[]“. Jelikož nepotřebuješ objekt typu pole, ale obecný objekt, měl bys psát spíš „new Object()“ nebo „{}“. |
||
Měsíček Profil |
#8 · Zasláno: 5. 12. 2008, 12:55:58
Reaguji na Chamurappiho:
"Místo „new Array()“ můžeš psát „[]“." Pokud vytváří jen prázdnou definici pole tak může, ale při naplnění jsou to naprosto odlišné konstrukce. <script type="text/javascript"> var a_1 = new Array(1); var a_2 = [1]; alert(a_1[0]); // Undefined alert(a_2[0]); // 1 </script> |
||
Časová prodleva: 15 let
|
0