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
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 *
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
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 *
_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
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 *
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 *
simonik:
Tam je vlastně nejprve return a potom Show.zmena, takže se to tam nikdy nedostane.
Jcas
Profil *
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 *
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 *
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.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0