All language subtitles for 10. The this Keyword

af Afrikaans
ak Akan
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bem Bemba
bn Bengali
bh Bihari
bs Bosnian
br Breton
bg Bulgarian
km Cambodian
ca Catalan
ceb Cebuano
chr Cherokee
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
ee Ewe
fo Faroese
tl Filipino
fi Finnish
fr French
fy Frisian
gaa Ga
gl Galician
ka Georgian
de German
el Greek
gn Guarani
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ia Interlingua
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
rw Kinyarwanda
rn Kirundi
kg Kongo
ko Korean
kri Krio (Sierra Leone)
ku Kurdish
ckb Kurdish (Soranî)
ky Kyrgyz
lo Laothian
la Latin
lv Latvian
ln Lingala
lt Lithuanian
loz Lozi
lg Luganda
ach Luo
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mfe Mauritian Creole
mo Moldavian
mn Mongolian
my Myanmar (Burmese)
sr-ME Montenegrin
ne Nepali
pcm Nigerian Pidgin
nso Northern Sotho
no Norwegian
nn Norwegian (Nynorsk)
oc Occitan
or Oriya
om Oromo
ps Pashto
fa Persian Download
pl Polish
pt-BR Portuguese (Brazil)
pt Portuguese (Portugal)
pa Punjabi
qu Quechua
ro Romanian
rm Romansh
nyn Runyakitara
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
sh Serbo-Croatian
st Sesotho
tn Setswana
crs Seychellois Creole
sn Shona
sd Sindhi
si Sinhalese
sk Slovak
sl Slovenian
so Somali
es Spanish
es-419 Spanish (Latin American)
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
tt Tatar
te Telugu
th Thai
ti Tigrinya
to Tonga
lua Tshiluba
tum Tumbuka
tr Turkish
tk Turkmen
tw Twi
ug Uighur
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
wo Wolof
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 1 00:00:01,200 --> 00:00:02,330 The this keyword, 2 2 00:00:02,330 --> 00:00:05,340 is an extremely important concept to understand 3 3 00:00:05,340 --> 00:00:06,770 in JavaScript. 4 4 00:00:06,770 --> 00:00:10,490 And many beginners, find it especially difficult. 5 5 00:00:10,490 --> 00:00:11,530 But don't worry, 6 6 00:00:11,530 --> 00:00:14,730 It's actually not that hard if you know exactly 7 7 00:00:14,730 --> 00:00:16,733 how the this Keyword works. 8 8 00:00:18,720 --> 00:00:22,180 So, the this keyword or this variable 9 9 00:00:22,180 --> 00:00:24,710 is basically a special variable that 10 10 00:00:24,710 --> 00:00:28,160 is created for every execution context 11 11 00:00:28,160 --> 00:00:30,800 and therefore any function. 12 12 00:00:30,800 --> 00:00:33,540 In fact, we learned before that it's one 13 13 00:00:33,540 --> 00:00:35,110 of the three components 14 14 00:00:35,110 --> 00:00:37,450 of any execution context, 15 15 00:00:37,450 --> 00:00:41,080 along with the variable environment and scope chain 16 16 00:00:41,080 --> 00:00:42,200 that we already learned 17 17 00:00:42,200 --> 00:00:44,070 about before. 18 18 00:00:44,070 --> 00:00:46,780 Now, in general terms, the this keyword, 19 19 00:00:46,780 --> 00:00:49,420 will always take the value of the owner 20 20 00:00:49,420 --> 00:00:53,860 of the function in which, the this keyword is used. 21 21 00:00:53,860 --> 00:00:58,230 We also say, that it points to the owner of that function. 22 22 00:00:58,230 --> 00:01:00,590 And that sounds very abstract 23 23 00:01:00,590 --> 00:01:03,840 but we will see what that means in a second. 24 24 00:01:03,840 --> 00:01:07,040 For now, what's very important to understand 25 25 00:01:07,040 --> 00:01:09,810 is that the value of the this keyword 26 26 00:01:09,810 --> 00:01:11,690 is not static. 27 27 00:01:11,690 --> 00:01:14,120 So it's not always the same. 28 28 00:01:14,120 --> 00:01:16,060 It depends on how the function 29 29 00:01:16,060 --> 00:01:17,560 is actually called. 30 30 00:01:17,560 --> 00:01:20,581 And its value is only assigned when the function 31 31 00:01:20,581 --> 00:01:23,190 is actually called. 32 32 00:01:23,190 --> 00:01:24,540 So it's very different 33 33 00:01:24,540 --> 00:01:25,910 from a normal value, 34 34 00:01:25,910 --> 00:01:27,023 In this regard. 35 35 00:01:27,930 --> 00:01:29,560 if we set, for example, 36 36 00:01:29,560 --> 00:01:31,110 X to five, 37 37 00:01:31,110 --> 00:01:34,370 then X will always just be five. 38 38 00:01:34,370 --> 00:01:36,530 But the this keyword again, 39 39 00:01:36,530 --> 00:01:40,560 depends on the way in which a function is called. 40 40 00:01:40,560 --> 00:01:43,320 But what does that actually mean? 41 41 00:01:43,320 --> 00:01:46,380 Well, let's analyze four different ways 42 42 00:01:46,380 --> 00:01:48,540 in which functions can be called. 43 43 00:01:48,540 --> 00:01:51,840 And the first way to call a function is 44 44 00:01:51,840 --> 00:01:53,290 as a method. 45 45 00:01:53,290 --> 00:01:57,100 So as a function attached to an object. 46 46 00:01:57,100 --> 00:02:00,700 So when we call a method, the this keyword inside 47 47 00:02:00,700 --> 00:02:03,810 that method will simply point to the object 48 48 00:02:03,810 --> 00:02:06,610 on which the method is called, 49 49 00:02:06,610 --> 00:02:08,220 or in other words, 50 50 00:02:08,220 --> 00:02:10,210 it points to the object that 51 51 00:02:10,210 --> 00:02:12,180 is calling the method. 52 52 00:02:12,180 --> 00:02:13,290 Okay? 53 53 00:02:13,290 --> 00:02:14,750 And so let's illustrate this 54 54 00:02:14,750 --> 00:02:16,353 with a simple example. 55 55 00:02:17,230 --> 00:02:18,600 So the method here 56 56 00:02:18,600 --> 00:02:21,480 is the calcAge method, again, 57 57 00:02:21,480 --> 00:02:25,810 because it's a function attached to the Jonas object. 58 58 00:02:25,810 --> 00:02:27,300 in the last line here, 59 59 00:02:27,300 --> 00:02:29,030 we then call the method 60 60 00:02:29,030 --> 00:02:30,330 and as you see 61 61 00:02:30,330 --> 00:02:31,770 inside the method, 62 62 00:02:31,770 --> 00:02:34,260 we used the this keyword. 63 63 00:02:34,260 --> 00:02:36,820 Now, according to what we just learned, 64 64 00:02:36,820 --> 00:02:38,330 what should be the value 65 65 00:02:38,330 --> 00:02:40,610 of the this keyword here? 66 66 00:02:40,610 --> 00:02:41,850 And that's right, 67 67 00:02:41,850 --> 00:02:45,450 it should be Jonas, because that is the object that 68 68 00:02:45,450 --> 00:02:47,750 is calling the method down there 69 69 00:02:47,750 --> 00:02:49,030 in the last line. 70 70 00:02:49,030 --> 00:02:50,230 Isn't it? 71 71 00:02:50,230 --> 00:02:53,590 And so then, on Jonas, we can of course access 72 72 00:02:53,590 --> 00:02:55,810 all the properties that it has. 73 73 00:02:55,810 --> 00:03:00,360 And so, this.year will become 1989, 74 74 00:03:00,360 --> 00:03:04,620 because that's Jonas.year as well. 75 75 00:03:04,620 --> 00:03:05,980 So in this case, 76 76 00:03:05,980 --> 00:03:07,600 writing 'Jonas.year' 77 77 00:03:07,600 --> 00:03:09,820 would have the exact same effect 78 78 00:03:09,820 --> 00:03:11,750 as 'this.year'. 79 79 00:03:11,750 --> 00:03:13,350 But doing it this way 80 80 00:03:13,350 --> 00:03:15,560 is a way better solution, 81 81 00:03:15,560 --> 00:03:17,980 for many reasons that we will get into 82 82 00:03:17,980 --> 00:03:19,860 throughout the course. 83 83 00:03:19,860 --> 00:03:21,030 And we will play around 84 84 00:03:21,030 --> 00:03:22,860 with this example a bit more 85 85 00:03:22,860 --> 00:03:24,582 in the next video. 86 86 00:03:24,582 --> 00:03:28,130 But anyway, another way we call functions 87 87 00:03:28,130 --> 00:03:29,750 is by simply calling them 88 88 00:03:29,750 --> 00:03:31,470 as normal functions. 89 89 00:03:31,470 --> 00:03:36,470 So not as a method and so not attached to any object. 90 90 00:03:37,120 --> 00:03:38,040 In this case, 91 91 00:03:38,040 --> 00:03:39,050 the this keyword, 92 92 00:03:39,050 --> 00:03:41,560 will simply be undefined. 93 93 00:03:41,560 --> 00:03:45,430 However, that is only valid for strict mode. 94 94 00:03:45,430 --> 00:03:47,740 So if you're not in strict mode, 95 95 00:03:47,740 --> 00:03:49,290 this will actually point 96 96 00:03:49,290 --> 00:03:50,560 to the global object, 97 97 00:03:50,560 --> 00:03:52,700 which in case of the browser 98 98 00:03:52,700 --> 00:03:54,920 is the window object. 99 99 00:03:54,920 --> 00:03:57,420 And that can be very problematic 100 100 00:03:57,420 --> 00:03:58,253 and so, 101 101 00:03:58,253 --> 00:04:00,430 this is yet another very good reason 102 102 00:04:00,430 --> 00:04:02,733 to always use strict mode. 103 103 00:04:03,600 --> 00:04:06,150 Next, we have arrow functions 104 104 00:04:06,150 --> 00:04:07,930 and while arrow functions 105 105 00:04:07,930 --> 00:04:09,632 are not exactly a way 106 106 00:04:09,632 --> 00:04:11,610 of calling functions. 107 107 00:04:11,610 --> 00:04:13,670 It's an important kind of function 108 108 00:04:13,670 --> 00:04:15,450 that we need to consider, 109 109 00:04:15,450 --> 00:04:19,620 because, remember, arrow functions do not get their own 110 110 00:04:19,620 --> 00:04:21,120 'this keyword'. 111 111 00:04:21,120 --> 00:04:23,720 Instead, if you use 'the this variable' 112 112 00:04:23,720 --> 00:04:25,200 in an arrow function, 113 113 00:04:25,200 --> 00:04:27,310 it will simply be the this keyword 114 114 00:04:27,310 --> 00:04:29,400 of the surrounding function. 115 115 00:04:29,400 --> 00:04:31,600 So of the parent function 116 116 00:04:31,600 --> 00:04:33,070 and in technical terms, 117 117 00:04:33,070 --> 00:04:36,230 this is called the 'lexical this keyword,' 118 118 00:04:36,230 --> 00:04:38,550 because it simply gets picked up 119 119 00:04:38,550 --> 00:04:40,860 from the outer lexical scope 120 120 00:04:40,860 --> 00:04:43,130 of the arrow function. 121 121 00:04:43,130 --> 00:04:46,770 So never ever forget this very important property 122 122 00:04:46,770 --> 00:04:48,420 of arrow functions. 123 123 00:04:48,420 --> 00:04:51,060 Believe me that actually I run into 124 124 00:04:51,060 --> 00:04:52,310 one or two bugs 125 125 00:04:52,310 --> 00:04:54,370 because of this behavior. 126 126 00:04:54,370 --> 00:04:55,203 Okay? 127 127 00:04:55,203 --> 00:04:57,480 So it's really important not to forget 128 128 00:04:57,480 --> 00:05:00,170 that arrow functions do not get their own 129 129 00:05:00,170 --> 00:05:01,157 'this keyword.' 130 130 00:05:02,170 --> 00:05:03,003 Okay. 131 131 00:05:03,003 --> 00:05:05,910 And finally, if a function is called 132 132 00:05:05,910 --> 00:05:07,700 as an event listener, 133 133 00:05:07,700 --> 00:05:10,250 then the this keyword will always point 134 134 00:05:10,250 --> 00:05:11,381 to the DOM element 135 135 00:05:11,381 --> 00:05:14,960 that the handler function is attached to. 136 136 00:05:14,960 --> 00:05:17,093 Very straightforward right? 137 137 00:05:17,960 --> 00:05:19,140 Now, the this keyword 138 138 00:05:19,140 --> 00:05:20,980 is usually a big source 139 139 00:05:20,980 --> 00:05:23,120 of confusion for beginners. 140 140 00:05:23,120 --> 00:05:25,130 But if you know these rules, 141 141 00:05:25,130 --> 00:05:27,920 then it shall become a lot simpler 142 142 00:05:27,920 --> 00:05:29,780 and to make it even simpler. 143 143 00:05:29,780 --> 00:05:31,460 It's also important to know 144 144 00:05:31,460 --> 00:05:34,470 what the, this keyword is not. 145 145 00:05:34,470 --> 00:05:37,880 So this will never point to the function 146 146 00:05:37,880 --> 00:05:40,090 in which we are using it. 147 147 00:05:40,090 --> 00:05:42,860 Also, the this keyword will never point 148 148 00:05:42,860 --> 00:05:44,590 to the variable environment 149 149 00:05:44,590 --> 00:05:46,180 of the function. 150 150 00:05:46,180 --> 00:05:49,050 And these are two pretty common misconceptions 151 151 00:05:49,050 --> 00:05:51,670 and so that's why I'm addressing them here. 152 152 00:05:51,670 --> 00:05:52,700 Okay? 153 153 00:05:52,700 --> 00:05:55,240 So again, the rules that I showed you here 154 154 00:05:55,240 --> 00:05:57,740 is all that you need to know. 155 155 00:05:57,740 --> 00:05:58,573 All right. 156 156 00:05:58,573 --> 00:06:01,400 And now just for the sake of completion, 157 157 00:06:01,400 --> 00:06:03,330 there are actually other ways 158 158 00:06:03,330 --> 00:06:05,790 in which we can call a function, 159 159 00:06:05,790 --> 00:06:06,623 for example, 160 160 00:06:06,623 --> 00:06:10,040 using the new keyword or the call apply 161 161 00:06:10,040 --> 00:06:12,110 and bind methods, 162 162 00:06:12,110 --> 00:06:15,100 but we don't know yet what any of these are. 163 163 00:06:15,100 --> 00:06:17,590 And so I will talk about how the this keyword 164 164 00:06:17,590 --> 00:06:18,950 works with them, 165 165 00:06:18,950 --> 00:06:21,210 when the time comes. 166 166 00:06:21,210 --> 00:06:24,170 Anyway, that's it for this lecture. 167 167 00:06:24,170 --> 00:06:26,180 So let's now use this in practice 168 168 00:06:26,180 --> 00:06:27,583 to make it crystal clear. 12858

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.