| Autor | Zpráva | ||
|---|---|---|---|
| Stalker Profil |
#1 · Zasláno: 15. 5. 2013, 12:07:56
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 |
#2 · Zasláno: 15. 5. 2013, 12:25:55
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 |
#3 · Zasláno: 15. 5. 2013, 13:22:25
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 |
#4 · Zasláno: 15. 5. 2013, 14:33:13
Pridal bych jeste tohle:
<div onclick="alert(this.title);alert(this.innerHTML);" title="ahoj">kuk</div> |
||
| Stalker Profil |
#5 · Zasláno: 15. 5. 2013, 15:22:55
[#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
}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();var ccc = {
bbb: 123,
zobraz: function() {alert(this.bbb);} // tady si ted ale nejsem jisty, jestli to s this pujde :)
}
ccc.zobraz(); |
||
| _es Profil |
#7 · Zasláno: 16. 5. 2013, 10:34:53
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> zmenText nemá ten objekt ako zistiť, respektíve je tým dosiahnuté to, že funkcia nemá priamo závisieť od zdroja udalosti.
|
||
| Chamurappi Profil |
#8 · Zasláno: 16. 5. 2013, 11:29:17
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.
|
||
|
Časová prodleva: 12 let
|
|||
0