Diskuze: This

JavaScript JavaScript This

Avatar
Matej
Člen
Avatar
Matej:

Zdravim , mohol by mi dakto vysvetlit , popr. hodit daky link na kvalitny vyklad , co je THIS? Chapem this ked ide o priradovanie atributov , ale okrem toho to vobec .

 
Odpovědět 31.3.2014 18:44
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na Matej
Drahomír Hanák:

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);
Editováno 31.3.2014 20:06
 
Nahoru Odpovědět  +1 31.3.2014 20:04
Avatar
1Pupik1989
Člen
Avatar
1Pupik1989:

"this" je reference na objekt, v kterém se metoda vykonává. Mimo objekt je to Window.

Editováno 31.3.2014 20:12
 
Nahoru Odpovědět 31.3.2014 20:10
Avatar
Matej
Člen
Avatar
Matej:

Diky :) myslim ze som to pochopil a ak nie , tak mi to urcite dalo nejaky prinos informaci :P

 
Nahoru Odpovědět 31.3.2014 20:23
Avatar
1Pupik1989
Člen
Avatar
Odpovídá na Matej
1Pupik1989:

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.

 
Nahoru Odpovědět  +1 31.3.2014 20:33
Avatar
gcx11
Redaktor
Avatar
Odpovídá na 1Pupik1989
gcx11:

Všechny ne, například Python má self :)

 
Nahoru Odpovědět 31.3.2014 20:39
Avatar
1Pupik1989
Člen
Avatar
Odpovídá na gcx11
1Pupik1989:

Tak jasný, že ne všechny, ale převážná většina. Python je kapitola sama o sobě.

 
Nahoru Odpovědět 31.3.2014 21:12
Avatar
Odpovídá na 1Pupik1989
Michal Žůrek (misaz):

ale jenom v JavaScriptu není this vždycky stejné.

Nahoru Odpovědět 31.3.2014 21:15
Nesnáším {}, proto se jim vyhýbám.
Avatar
1Pupik1989
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
1Pupik1989:

Pokud ho nezavoláš s jiným kontextem, tak platí co jsem psal. Čili metody "apply" a "call" neřeším.

 
Nahoru Odpovědět  +1 31.3.2014 21:23
Avatar
Odpovídá na 1Pupik1989
Michal Žůrek (misaz):

já to vím, ale začátečníka třeba nenapadne, že když to zavolá v setInterval, tak to nebude fungovat.

Nahoru Odpovědět 31.3.2014 21:37
Nesnáším {}, proto se jim vyhýbám.
Avatar
1Pupik1989
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
1Pupik1989:

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.

Editováno 31.3.2014 22:15
 
Nahoru Odpovědět 31.3.2014 22:13
Avatar
Matej
Člen
Avatar
Matej:

takze napr

<span id="aaa"> bla bla </span>
<button onclick=sup.farba()> </button>

x.prototype.farba=function()
{this.style.color="blue"};

sup=document.getElementByID("aaa")
sup.farba()

?:)

 
Nahoru Odpovědět 1.4.2014 19:03
Avatar
Matej
Člen
Avatar
Matej:

sup.prototype­.farba=functi­on() * (neisiel edit)

 
Nahoru Odpovědět 1.4.2014 20:01
Avatar
1Pupik1989
Člen
Avatar
Odpovídá na Matej
1Pupik1989:

sup není konstruktor. Čili smaž prototype a pojede to. Většina prohlížečů má ale objekt HTMLElement nebo odnož a ten konstruktorem je.

 
Nahoru Odpovědět 1.4.2014 21:03
Avatar
1Pupik1989
Člen
Avatar
Odpovídá na Matej
1Pupik1989:
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.

Editováno 1.4.2014 21:10
 
Nahoru Odpovědět 1.4.2014 21:10
Avatar
Matej
Člen
Avatar
Odpovídá na 1Pupik1989
Matej:

ok diky :)

Editováno 1.4.2014 21:14
 
Nahoru Odpovědět 1.4.2014 21:12
Avatar
Matej
Člen
Avatar
Matej:

btw mholo by byt potom ?:)

function.farba.prototype=this.font-size="5px"
Editováno 2.4.2014 19:27
 
Nahoru Odpovědět 2.4.2014 19:27
Avatar
Matej
Člen
Avatar
Matej:

alebo ?:D

farba.prototype.font-size="5px"
 
Nahoru Odpovědět 2.4.2014 19:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 18 zpráv z 18.