Úvod
Když spustíme náš kód v JavaScriptu, vytvoří se Global Execution Context (GBE). Ale spolu s GBE i Global
objekt a this
vytvoří se také klíčová slova. Ale co jsou Global
objekt a this
klíčové slovo, o kterém zde mluvíme? Takže, pojďme prozkoumat, zde Global
Objekt odkazuje na window
objekt a this
je klíčové slovo, které odkazuje na tento window
objekt v globálním prostoru, tj. v globálním prostoru window === this
. Pokud tedy napíšeme window === this
v console
dostaneme true
jako výstup. Ale chování this
se mění podle toho, kde je vyvolán. Pojďme tedy prozkoumat, jak se chová na různých místech.
vyvoláním this
v globálním prostoru nebo samostatně
Když napíšete console.log(this)
ve vašem javascriptovém programu a zkontrolujte jej v console
, uvidíte, že se jedná o Window
objekt. Takže v globálním prostoru this
odkazuje na Window
.
vyvoláním this
uvnitř funkce
Takže, co si myslíte, když vyvoláme this
uvnitř funkce? Napíšeme tedy pár řádků a uvidíme
function func(){
console.log(this);
}
func();
Zde to také odkazuje na objekt Window, ale proč? Protože zde je funkce func vlastností Global
tj. Window
objekt. Zde tedy můžeme také říci, zda zavoláme this
ve funkci jako - this
odkazuje na objekt, jehož je tato funkce vlastností . Nebojte se, pokud jste to ještě nepochopili, věřte mi, že to pochopíte v další části.
vyvolání tohoto v objektu
Udělejme tedy objekt a vyvolejme to uvnitř.
const data = {
firstName : 'Sobit',
lastName : 'Prasad',
fullName : function(){
return this.firstName + " " +this.lastName;
}
}
console.log(data.fullName());
// Output : Sobit Prasad
Takže zde bude výstup Sobit Prasad
. Zde uvnitř objektu data
vyvolali jsme tuto vnitřní funkci fullName
a funkce fullName
je vlastnost objektu data
a proto zde this
odkazuje na data
objekt a ne Window
objekt. Pojďme to pochopit hlouběji pomocí dalšího příkladu.
const data1 = {
firstName: 'Sobit',
lastName: 'Prasad',
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
const dataOne = data1.fullName;
const data2 = {firstName: 'Mohit', lastName: 'Sharma', dataOne };
console.log(data2.dataOne());
//Output : Mohit Sharma
Ve výše uvedeném programu i přes deklaraci funkce fullName
uvnitř objektu data1
, dostaneme výstup jako Mohit Sharma
, protože v době vyvolání dataOne
je vlastnost objektu data2
.
this
pod use strict
"use strict"
function data(){
console.log(this);
}
data();
//Output : undefined
Když zahrneme use strict
v našem programu neumožňuje výchozí vazbu a tak dostáváme undefined
.
Tak, to je vše pro lidi na tomto blogu. Budu velmi rád, když mi dáte vědět nějaké návrhy/opravy v některém z mých článků na blogu. Pokud považujete tento článek za užitečný, pozdravte mě na LinkedIn 🌸