Autor | Zpráva | ||
---|---|---|---|
hypot Profil |
#1 · Zasláno: 6. 10. 2018, 10:27:13
Zdravím,
nevím, zda jsem srozumitelně do nadpisu napsal, o co mi jde. Narazil jsem na na následující problém: Potřebuju, aby se po kliknutí na určité zvýrazněné části textu do pole vložil jejich atribut. Šel jsem na to přes objekt tohoto znění: var objekt1 = { polozky: [], zaznamPolozek: function(event) { if ($(event.target)[0].hasAttribute("data-polozka")) { this.polozky.push($(event.target).attr("data-polozka")) } } } $(".polozka").on("click", objekt1.zaznamPolozek) $(".polozka").on("click", function(event) { objekt1.zaznamPolozek(event) }) $("[data-polozka]").on("click", zmenaPozadi) function zmenaPozadi(event) { $(event.target).css("backgroundColor", "yellow") } Dostane-li se mi nějakého srozumitelného vysvětlení, děkuji za něj předem. |
||
Mlocik97m Profil * |
nemá každá funkcia za názvom zátvorky?
lebo v prvom pripade ti tam chybajz |
||
Kajman Profil |
#3 · Zasláno: 6. 10. 2018, 21:20:39
hypot:
Rozdílné volání asi způsobí rozdílný objekt v this. Možná tam ten this být nemusí a polozky budou dostupné. |
||
hypot Profil |
#4 · Zasláno: 7. 10. 2018, 09:22:23
Mlocik97m:
„nemá každá funkcia za názvom zátvorky?“ V metodách on() a addEventListener() se pojmenovaná funkce zadává bez závorek. Takže v tomto případě ne (koneckonců, jak se lze přesvědčit, příklad s funkcí zmenaPozadi() je funkční (přidání závorek by jej znefunkčnilo - teoretické zdůvodnění pro to ovšem nemám). Kajman: „Rozdílné volání asi způsobí rozdílný objekt v this.“ To mě taky napadlo, ale o jaký nový objekt by se mělo jednat, už nevím. „Možná tam ten this být nemusí a polozky budou dostupné.“ To sotva. Na vlastnost objektu nelze odkazovat bez uvedení jména samotného objektu a this zastupuje právě jméno objektu, v mém případě objekt1. Když mimochodem this nahradím za objekt1 (čili objekt1.polozky.push($(event.target).attr("data-polozka")) , změní se jen chyba oznámená v konzoli na "objekt1.polozky is undefined", takže to vypadá, že v použití samotného this to nebude.
|
||
Mlocik97m Profil * |
#5 · Zasláno: 7. 10. 2018, 09:25:45
hypot:
ja som nikdy nepsal funkci naprimo do parametru metod ale volal callback alebo funkci zapsal do tela metody. Vzdy mi to tak fungovalo. |
||
hypot Profil |
#6 · Zasláno: 7. 10. 2018, 13:05:20
Mlocik97m:
„Vzdy mi to tak fungovalo.“ Chápu, že v praxi to funguje tak, že většina lidí se přidržuje určité osvědčené rutiny, aniž by jí třeba rozuměla, jenže když se něco zvrtne (jako v mém případě), neznalost teorie se ukáže jako závada (člověk prostě neví, co dělá). Ještě jsem narazil na jeden příklad s podobnými příznaky, který jsem náhodou zase vyřešil, ale stále nechápu, proč je třeba zrovna daného řešení: Mám prototyp objektu mimo jiné s touto vlastností a metodou: function Prototyp() { this.navstiveneS = []; this.historie = function() { let cisloStrany = window.location.href.slice(-4, -1); if (sessionStorage.getItem("navstiveneStranky")) this.navstiveneS = JSON.parse(sessionStorage.getItem("navstiveneStranky")); if (this.navstiveneS.indexOf(cisloStrany) == -1) { this.navstiveneS.push(cisloStrany); sessionStorage.setItem("navstiveneStranky", JSON.stringify(this.navstiveneS)) } } } Následně pak z prototypu vytvořím instanci objektu a volám jeho metodu: var objekt1 = new Prototyp(); $(window).on("beforeunload", objekt1.historie) $(window).on("beforeunload", function() { objekt1.historie() } Zkusil jsem metodu objektu volat také bez jQuery (čert mi ho byl dlužen): window.addEventListener("beforeunload", objekt1.historie) Takže stále by mě zajímalo vysvětlení, proč je v podobných případech třeba někdy vložit volání pojmenované funkce (metody objektu) do anonymní funkce a jindy ne. |
||
Kcko Profil |
#7 · Zasláno: 7. 10. 2018, 13:15:23
hypot:
Podívej se na www.youtube.com/watch?v=Ek6FHSiTXrc a pak Ti to třeba bude jasné (a můžeš si v JQ nastudovat $.proxy) |
||
Časová prodleva: 4 roky
|
0