Autor | Zpráva | ||
---|---|---|---|
UsTruLo Profil * |
#1 · Zasláno: 5. 5. 2006, 16:23:36
ahoj,
deklaruju pole mimo funkci, pak do pole vlozim ve funkci hodnotu.v jine funkci ulozim do tohoto pole jinou hodnotu a v tretim potrebuju znat tu hodnotu z minuleho pole(ma to svuj duvod prosim nepolemizovat zbytecne).Zkousel jsem dat pred jmeno pole & kdyz jsem do nej vkladal v jedne funkci hodnotu ale & asi neni odkazem jak jsem myslel.jak se to dela? |
||
UsTruLo Profil * |
#2 · Zasláno: 5. 5. 2006, 16:24:24
proste potrebuju prehodnotit tu prvni hodnotu tak aby to bylo platne i v jine funkci kde to taham
|
||
ah01 Profil |
#3 · Zasláno: 5. 5. 2006, 23:14:39 · Upravil/a: ah01
Jestli jsem to správně pochopil, tak bojujete s referencemi na objekty. V JavaScriptu (obecně v OOP jazycích - výjimku tvoří PHP4 – odtud nejspíš ten &) se nikdy nedostanete k objektu jako takovému, ale vždy pracujete pouze s referencí na daný objekt.
Např.:
a když uděláte
Tak vás nejspíš zarazí, že poleA i poleB obsahuje ["a", "b", "c"]. To ale není nic překvapujícího, když si uvědomíte, že proměnná poleA i poleB jsou reference na jednu instanci třídy Array. Pokud tedy chcete aby poleB byla kopie poleA, musíte vytvořit nové pole a umístit do něj obsah poleA. Lze to vyřešit malým trikem:
Metoda slice vytvoří nové pole od zadaného indexu. |
||
UsTruLo Profil * |
#4 · Zasláno: 5. 5. 2006, 23:35:17
diky konecne jsem pochopil par veci.ale k tomuhle pripadu mi jde o jednu zarazejci skutecnost:
deklaruji pole globalne(mimo funkci) var pole=new Array(); function Polee(){ pole[0]="brax"; } function Kraul(){ pole[0]=6; } function Paul(){ window.alert(pole[0]); } no timhle chci jen nastinit jaky mam problem rozhodne to neni tak jednoduche to co delam ja v tom mam zabudevane objekty atd. ale prestoze vim ze se to vsechno vola spravne pomoci vychytavani tak mi to vypisi brax(nerikam ze tohle ale tamten slozity priklad) |
||
ah01 Profil |
#5 · Zasláno: 6. 5. 2006, 01:08:55 · Upravil/a: ah01
Postup popsaný výše, vytvoří tzv. mělkou kopii. Pokud pole obsahuje další objekty, je v tomto případě vytvořeno nové pole, ale jednotlivé položky (reverence na objekty) ukazují opět na stejné objekty jako v poli původním. Pak potřebujete vytvořit hlubokou kopii a to je poněkud náročnější.
Asi nejjednodušší řešení je následující kód:
a použití:
Kompletní příklad: Object.prototype.clone = function (){ Netvrdím, že je to nejlepší řešení. Doporučuji zkusit Google (např. zde ). |
||
UsTruLo Profil * |
#6 · Zasláno: 6. 5. 2006, 16:10:06
dobre reseni pouziju to jinak ale tohle jsem potreboval vedet.
Neexistuje zadna metoda ktera by fungovala jako clone()? kdyz bych totiz potreboval neco takovehleho: var ou=new Array("Pseudoblábol"); var jdou=ou; delete ou[0]; window.alert(jdou[0]); window.alert(ou[0]); tak se mi to dalsi uz nevytiskne takze potrebuju nejak vymyslet abych ho potom mohl smaznout. proste se chci zeptat jestli kdyz to udelam takhle jak pises nebo treba jinak.napr. takhle: function c(w) { for (i in w) { if (typeof w[i] == 'object') { this[i] = new c(w[i]); } else{ this[i] = w[i]; } } } tak kdyz ten stary smaznu bude tam stale.ze se nebude jen odkazovat na ten puvodni. Neco s tim udelam ale kdyby jsi o necem vedel tak mi usetris praci :) |
||
Leo Profil |
#7 · Zasláno: 6. 5. 2006, 16:37:04
Proste musite projit rekurzivne pole do nejnizsi urovne a prekopirovat hodnoty, nemuzete prirazovat pole do pole. Leo
|
||
UsTruLo Profil * |
#8 · Zasláno: 6. 5. 2006, 16:45:00
tak jsem zjistil ze takto to funguje a hodnota tam zustane i po smazani puvodniho:
function Jdu(){ var ou=new Array("Pseudogotika"); window.alert(ou[0]); var jdou=new C(ou); delete ou[0]; window.alert(jdou[0]); } function C(w){ for(i in w){ if (typeof w[i] == 'object') { this[i] = new c(w[i]);}else{ this[i] = w[i];} } } dekuji moc za pomoc :) |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0