Diskuze: This
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 18 zpráv z 18.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
this
je prostředí, ve kterém se vykonává funkce.
Může to být například HTML element v DOM události:
// this je HTMLElement
element.addEventListener('click', function() { console.log(this); }, false);
// nebo jQuery, this je jQuery wrapper nad HTMLElementem
element.click(function() { console.log(this); });
Nebo to může být objekt, v jehož metodě/konstruktoru něco děláš.
function Point(x, y) {
this.x = x;
this.y = y;
};
var zero = new Point(0, 0);
console.log(zero.x === 0);
console.log(zero.y === 0);
Dokonce to nemusí být objekt. Dá se totiž dynamicky měnit a v podstatě
jakoukoli funkci můžeš zavolat s jiným kontextem. Na to slouží metody
.call(kontext, argument1, argument2, ...) nebo .apply(kontext, poleArgumentů),
které najdeš na prototypu objektu Function
.
// zavolání funkci slice z objektu Array na objektu, který je mu podobný (např. NodeList)
var array = Array.prototype.slice.call(arrayLikeObject, 0);
// zavolá callback funkci, pro kterou bude this odpověď na nějaký požadavek (třeba AJAX)
var result = callback.apply(response, args);
"this" je reference na objekt, v kterém se metoda vykonává. Mimo objekt je to Window.
Prostě vytvoříš objekt "NejakyObjekt". Dáš mu metodu "nejakaMetoda". No a pokud zavoláš "NejakyObjekt.nejakaMetoda()", tak uvnitř bude platit "this === NejakyObjekt". To je celé kouzlo. Na pochopení ti doporučím zahraniční tutorialy o OOP v javascriptu. Nebo vyhledej na google "javascript this". Nejspíš i nějaký tutorial najdeš. Nemusí to být ani javascript, this mají všechny jazyky.
Tak jasný, že ne všechny, ale převážná většina. Python je kapitola sama o sobě.
ale jenom v JavaScriptu není this vždycky stejné.
Pokud ho nezavoláš s jiným kontextem, tak platí co jsem psal. Čili metody "apply" a "call" neřeším.
já to vím, ale začátečníka třeba nenapadne, že když to zavolá v setInterval, tak to nebude fungovat.
Mimo objekt bude this obsahovat Window, to jsem psal. setInterval je metoda objektu window, čili this === window. Čili co jsem psal, tak platí pořád. Vlastně window je globální objekt, v kterém se vše děje.
sup není konstruktor. Čili smaž prototype a pojede to. Většina prohlížečů má ale objekt HTMLElement nebo odnož a ten konstruktorem je.
sup.farba = function(){
this.style.color="blue";
};
nebo
Element.prototype.farba = function(){
this.style.color="blue";
};
V druhém případě tu metodu budou mít všechny DOM Elementy.
Zobrazeno 18 zpráv z 18.