Autor | Zpráva | ||
---|---|---|---|
Jcas Profil * |
Našel jsem dva bezva články, kde je toho hodně vysvětleno, ale....
http://zdrojak.root.cz/clanky/oop-v-javascriptu-i/ http://zdrojak.root.cz/clanky/javascript-a-oblast-pusobnosti-promennych-dil-druhy/ Nechápu vazbu a viditelnost proměnné. Tento styl syntaxe var * = { * : funkcio () {} } nemohu najít nikde dobře vysvětlen. var Show = { set_pole : function(jmeno, pocet) { alert(typeof this.set_pole); var pole = new Array(jmeno); alert(typeof pole); alert(pole[0]); for (i=1; pole.length<pocet; i++) { pole[i] = jmeno + i; alert(pole[i]); } alert(typeof Show); return pole; Show.zmena(); }, zmena : function() { alert(pole); } } Jestli to dobře chápu, tak Show je objekt set_pole je metoda a funke je vlastnost metody Když deklaruji pole ve funkci, tak se jedná o lokální proměnou A tady je mám menší nejasnost. Kdybych použil this.pole, tak moje logika uvažuje stylem, že by se pole mělo stát globální proměnnou pro objek Show, Ale this.pole nefunguje a hodí undefined. Cílem je zveřejnit pole pro všechny další metody. |
||
_es Profil |
#2 · Zasláno: 2. 6. 2010, 20:59:53
Show je premenná, do ktorej je priradený (odkaz na) objekt s dvomi vlastnosťami:
s vlastnosťou set_pole , do ktorej je priradená funkcia (odkaz na tú funkciu),
a s vlastnosťou zmena , do ktorej je priradená zase iná funkcia (odkaz na tú funkciu).
|
||
Jcas Profil * |
#3 · Zasláno: 2. 6. 2010, 21:11:55
Aha, takže jsem to pochopil špatně. Ovšem v tomhle případě:
Jestliže je do proměnné přiřazen objekt se dvěmi vlastnostmi, tak this.pole (dle toho jak chápu články) by mělo okamžitě být veřejné pro obě vlastnosti. Buď mám někde chybu, nebo to tak není. (bavím se o nahrazení "var pole: za "this.pole") |
||
_es Profil |
#4 · Zasláno: 2. 6. 2010, 21:35:50
Jcas:
To, na aký objekt ukazuje kľúčové slovo this v hocijakej funkcii, je závislé hlavne od toho, ako bola tá funkcia zavolaná, nie veľmi od toho, ako bola definovaná.
Tie články nie sú veľmi pre začiatočníkov. Ak ťa JavaScript zaujíma, radšej si na to zaobstaraj nejakú dobrú literatúru. |
||
simonik Profil * |
#5 · Zasláno: 3. 6. 2010, 08:37:15
_es:
Já si myslím, že bys musel použít konstrukční funkci a operátor new abys mohl používat klíčové this tak, jak to uvažuješ. |
||
_es Profil |
#6 · Zasláno: 3. 6. 2010, 09:26:29 · Upravil/a: _es
simonik:
„abys mohl používat klíčové this tak, jak to uvažuješ.“ Neuvažujem veľmi konkrétne. Len sa snažím objasniť Jcasovi, že to, na aký objekt ukazuje this vo funkcii, závisí hlavne od toho, akým spôsobom bola funkcia zavolaná.
To, že tomu nerozumie, objasňuje: Jcas:„Ale this.pole nefunguje a hodí undefined.“ Nech už bola funkcia spustená hocijako, tak v nej výraz this.pole nemá zmysel.
> Nechápu vazbu a viditelnost proměnné. Tento styl syntaxe > var * = { * : funkcio () {} } > nemohu najít nikde dobře vysvětlen. Je to výraz s literálom objektu a literálom funkcie. |
||
simonik Profil * |
#7 · Zasláno: 3. 6. 2010, 13:44:07
Jcas:
<script type="text/javascript"> var Show = { set_pole : function(jmeno, pocet) { alert(typeof this.set_pole); this.pole = new Array(jmeno); alert(typeof this.pole); alert(this.pole[0]); for (i=1; this.pole.length<pocet; i++) { this.pole[i] = jmeno + i; alert(this.pole[i]); } alert(typeof Show); return this.pole; Show.zmena(); }, zmena : function() { alert(this.pole); } } Show.set_pole("petr",5); Show.zmena(); </script> Ale takto to funguje jak jsi chtěl. |
||
simonik Profil * |
#8 · Zasláno: 3. 6. 2010, 13:51:01
simonik:
Tam je vlastně nejprve return a potom Show.zmena, takže se to tam nikdy nedostane. |
||
Jcas Profil * |
#9 · Zasláno: 3. 6. 2010, 17:52:11
Než jste odpověděli, tak jsem to upravil stylem a to funguje.
Napřed jsem provedl cyklus "for" a potom jsem vytvořil metodu this.set_pole.pole = pole return jsem vyhodil a nechal jsem prostě jen volání funkce. Ovšem mým účelem není jen to rozchodit, ale to pochopit. Jak správně při této stavbě scriptu, kdy mám jednu proměnnou a v ní několik vlastností, zveřejním nějakou proměnou z jedné vlastnosti pro všechny ostatní vlastnosti. Myslel jsem, že this (odkaz na kontext-objekt) je správný postup. |
||
Jcas Profil * |
#10 · Zasláno: 3. 6. 2010, 18:20:34
var Show = { set_pole : function(jmeno, pocet) { var pole = new Array(jmeno); for (i=1; pole.length<pocet; i++) { pole[i] = jmeno + i; } this.pole = pole; }, zmena : function() { alert(this.pole); } } Show.set_pole("petr",5); Show.zmena(); Takže asi takhle nějak jsem to chtěl. Takže jestli dobře chápu. Mám proměnou a k ní přiřazenou vlastnost set_pole. V ní deklaruji lokální proměnou pole. Vytvořím pole s několika hodnotami. A potom definuji (metodu?)(vlastnost?) pole, kterou pomocí this přiřadím k objektu (jakému?)(set_pole?), nebo (Show?). A tím ji zveřejním pro ostatní vlastnosti, aby si mohli z pole převzít hodnoty. Je to takhle správně? Jak moje chápání, tak způsob provedení? |
||
simonik Profil * |
#11 · Zasláno: 4. 6. 2010, 08:57:51
Jcas:
Já si myslím, že je to stejné, jako kdybys deklaroval vlastnost se jménem "pole" a potom se na ni odkazovat pomocí this. <script type="text/javascript"> var Show = { pole : [], set_pole : function(jmeno, pocet) { var pole = new Array(jmeno); for (i=1; pole.length<pocet; i++) { pole[i] = jmeno + i; } this.pole = pole; }, zmena : function() { alert(this.pole); } } Show.set_pole("petr",5); Show.zmena(); </script> Ale měli by odpovědět nějací guru. |
||
Časová prodleva: 14 let
|
0