Autor Zpráva
Stalker
Profil
Mohli byste mi prosím někdo popsat co to vůbec this je, co znamená a jak se v JavaScriptu používá?

Českou dokumentaci jsem k tomu nějak nemohl najít a v angličtině tomu neustále nemohu přijít na kloub. Učil jsem se z této stránky, ale kvůli jazykové bariéře mi pointa použití bohužel stále uniká.

Vím, že se tím dá zkrátit zápis cesty k objektu, ale to slouží opravdu jen pro to, abych nepsal například objekt.barak.pokoj.postel ale jen this.postel?

Když nevím, kdy to použít, tak tu cestu radši vždy můžu vypisovat celou a budu mít po problémech ne?

Předem děkuji za reakce a rady.
_es
Profil
Stalker:
co to vůbec this je, co znamená a jak se v JavaScriptu používá?
V rôznych prípadoch môže znamenať rôzne veci a aj sa môže používať rôzne:-)

Učil jsem se z této stránky...
Skús si pozrieť túto stránku dokumentácie Mozilly.
Chamurappi
Profil
Reaguji na Stalkera:
Operátor this je de facto argument funkce určený tím, jak je dotyčná funkce zavolaná.
postel.rozebrat();                 // teď bude uvnitř funkce v this postel
var rozebrat = postel.rozebrat;    // zkopírujeme si funkci do globální proměnné
rozebrat();                        // teď bude v this globální objekt
barak.rozebrat = postel.rozebrat;  // zkopírujeme si funkci do baraku
barak.rozebrat();                  // teď bude v this barak
new postel.rozebrat();             // teď bude v this nový objekt
peta
Profil
Pridal bych jeste tohle:
<div onclick="alert(this.title);alert(this.innerHTML);" title="ahoj">kuk</div>
Stalker
Profil
[#2] _es
V Angličtině pochopení podstaty bude zase trošku problém, ale díky za tip, určitě na to kouknu.

[#3] Chamurappi
Upřímně řečeno, je to pro mě matoucí. Nějak si to nedokážu představit v praxi.

[#4] peta
Tento příklad už zní rozumně. Ten bych i chápal :)

Jinak jsem si teď zkoušel ještě jeden příklad a už to pomalinku začínám chápat :) Viz.
<h1 onclick="zmenText(this)">Klikni na tento text!</h1>
<h2 onclick="dalsiZmena(this)">Klikni na tento text!</h2>

function zmenText(id)
{
id.innerHTML="Ooops!";
}
function dalsiZmena(jmeno)
{
jmeno.innerHTML="Ooooooooops!";
}

Do toho this se ukládá to, co se má vykonat v té funkci? Pak ale nechápu, proč se tam nevolá třeba celá ta funkce? Vždyť to je jedno, jestli to zavolám přes this, nebo přes název té fce, ne?
peta
Profil
Projdi si vsechno, co ti tu odkazovali.
Pouziti pak zalezi na tobe. Jsou duvody pro a proti to psat tak i tak. Nekdy zalezi na situaci.
<form name=prvni>
<input type=text name=aaa>
<input type=text name=bbb>
<input type=text name=ccc>
<input type=button value=spocitej onclick=spocitej(this.form)>
</form>
<form name=druhy>
<input type=text name=aaa>
<input type=text name=bbb>
<input type=text name=ccc>
<input type=button value=spocitej onclick=spocitej(this.form)>
</form>
<script>
function spocitej(form)
{
form.ccc.value = form.aaa.value + form.bbb.value
}
muzes vynechat u formularu name a kod bude pro oba jednotny a jednoduchy, v tomto pripade by to byl do pismenka duplicitni formular, coz se dobre komprimuje zip-html

nebo
onclick=spocitej(document.forms['prvni'])
onclick=spocitej(document.forms['druhy'])

a nebo
function spocitej1()
{
var form = document.forms['prvni'];
form.ccc.value = form.aaa.value + form.bbb.value
}
function spocitej2()
{
var form = document.forms['druhy'];
form.ccc.value = form.aaa.value + form.bbb.value
}

Nebo se this pouziva pro vytvareni objektu.
function aaa()
{
this.bbb = 123;
this.zobraz = function() {alert(this.bbb);}
}
var ccc = new aaa();
ccc.zobraz();
nebo
var ccc = {
bbb: 123,
zobraz: function() {alert(this.bbb);} // tady si ted ale nejsem jisty, jestli to s this pujde :)
}
ccc.zobraz();
_es
Profil
Stalker:
Vždyť to je jedno, jestli to zavolám přes this, nebo přes název té fce, ne?
Nie, v this je v tomto prípade objekt elementu, ktorý tú udalosť vyvolal. Ak by si mal
<h1 onclick="zmenText()">Klikni na tento text!</h1>
, tak funkcia zmenText nemá ten objekt ako zistiť, respektíve je tým dosiahnuté to, že funkcia nemá priamo závisieť od zdroja udalosti.
Chamurappi
Profil
Reaguji na peta:
Pridal bych jeste tohle
Lze si představit, že prohlížeč zavolá při kliku element.onclick(), takže tehdy je v this element.


Reaguji na Stalkera:
Upřímně řečeno, je to pro mě matoucí.
Za běžného stavu to, co je při volání funkce před tečkou, je this. Žádná hlubší věda v tom není.
Prakticky jediná zvláštnost je u těch událostí, kde funkci volá neviditelně prohlížeč a je nutné si zapamatovat, že v this je vždy element, na němž je událost odchycena.


Reaguji na peta:
tady si ted ale nejsem jisty, jestli to s this pujde :)
Pokud se bude volat ccc.zobraz(), tak ano. Pokud se bude ta funkce volat bez objektu (třeba (ccc.zobraz)()), tak ne.
_es
Profil
Chamurappi:
Pokud se bude ta funkce volat bez objektu (třeba (ccc.zobraz)()), tak ne.
Ale konkrétne (ccc.zobraz)() fungovať bude. Ten objekt cez tie zátvorky „prejde“. No na otestovanie v petovom kóde tam treba doplniť chýbajúce bodkočiarky.

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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