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.