Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
Avatar
Matej
Člen
Avatar
Matej:31.3.2014 18:44

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:31.3.2014 20:04

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:31.3.2014 20:10

"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:31.3.2014 20:23

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:31.3.2014 20:33

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:31.3.2014 20:39

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:31.3.2014 21:12

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):31.3.2014 21:15

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:31.3.2014 21:23

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):31.3.2014 21:37

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:31.3.2014 22:13

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:1.4.2014 19:03

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:1.4.2014 20:01

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:1.4.2014 21:03

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:1.4.2014 21:10
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:1.4.2014 21:12

ok diky :)

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

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:2.4.2014 19:44

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.