Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated:
1
1
00:00:01,380 --> 00:00:04,530
So as we reach the end of this section,
2
2
00:00:04,530 --> 00:00:08,640
let's quickly review all the terminology around classes
3
3
00:00:08,640 --> 00:00:11,650
because there is so much different stuff going on.
4
4
00:00:11,650 --> 00:00:15,270
So a lot of different features that you can use.
5
5
00:00:15,270 --> 00:00:17,800
And since classes are probably the way
6
6
00:00:17,800 --> 00:00:21,230
you're gonna implement OOP by yourself,
7
7
00:00:21,230 --> 00:00:25,200
it's always good to have a nice overview of everything
8
8
00:00:25,200 --> 00:00:26,453
that we can do with them.
9
9
00:00:28,510 --> 00:00:30,950
So here we have a huge class,
10
10
00:00:30,950 --> 00:00:34,060
which essentially contains all the features
11
11
00:00:34,060 --> 00:00:37,740
that we studied over the last couple of lectures.
12
12
00:00:37,740 --> 00:00:41,370
So this is how we define a class.
13
13
00:00:41,370 --> 00:00:44,810
And in this case, it is actually a child class.
14
14
00:00:44,810 --> 00:00:49,810
So student is a child class of the parent class person
15
15
00:00:49,860 --> 00:00:53,550
and that is because here we are using the extends keyboard
16
16
00:00:53,550 --> 00:00:57,730
to set up the inheritance between these two classes.
17
17
00:00:57,730 --> 00:01:00,130
And remember that the extends keyword
18
18
00:01:00,130 --> 00:01:04,560
will also automatically set up the prototype chain for us.
19
19
00:01:04,560 --> 00:01:06,803
So we don't have to do anything manually.
20
20
00:01:07,670 --> 00:01:11,570
Next up, this is how we define a public field.
21
21
00:01:11,570 --> 00:01:14,920
So this is what we did in a very recent lecture.
22
22
00:01:14,920 --> 00:01:19,080
And so remember that a public field is very similar
23
23
00:01:19,080 --> 00:01:22,980
to just a property that we defined in a constructor.
24
24
00:01:22,980 --> 00:01:26,550
So it is available on every created object.
25
25
00:01:26,550 --> 00:01:29,793
So on every instance created by this class.
26
26
00:01:30,730 --> 00:01:33,750
Then of course, we also have private fields
27
27
00:01:33,750 --> 00:01:36,920
and they are almost the same as public fields,
28
28
00:01:36,920 --> 00:01:40,980
but they are not accessible outside of the class.
29
29
00:01:40,980 --> 00:01:42,920
And so therefore this is perfect
30
30
00:01:42,920 --> 00:01:47,080
for implementing data privacy and encapsulation.
31
31
00:01:47,080 --> 00:01:49,940
We also have static public fields.
32
32
00:01:49,940 --> 00:01:53,180
And so these are fields or like properties
33
33
00:01:53,180 --> 00:01:56,510
that are available only on the class.
34
34
00:01:56,510 --> 00:01:58,690
And I didn't show them to you in the code.
35
35
00:01:58,690 --> 00:02:00,830
So in one of the lectures,
36
36
00:02:00,830 --> 00:02:03,120
but this is how we can implement them.
37
37
00:02:03,120 --> 00:02:05,570
So just like static methods,
38
38
00:02:05,570 --> 00:02:10,223
we use the static keyword to make any field static as well.
39
39
00:02:11,160 --> 00:02:14,180
Then here, this is the constructor method
40
40
00:02:14,180 --> 00:02:17,400
and it is automatically called by the new operator
41
41
00:02:17,400 --> 00:02:20,790
whenever we create a new instance of the class.
42
42
00:02:20,790 --> 00:02:23,440
So basically a new object.
43
43
00:02:23,440 --> 00:02:26,380
And this constructor method is mandatory
44
44
00:02:26,380 --> 00:02:29,800
in any regular class, but it might be omitted
45
45
00:02:29,800 --> 00:02:33,870
in a child class if we want it to have the exact same number
46
46
00:02:33,870 --> 00:02:36,873
and the exact same name of parameters.
47
47
00:02:38,610 --> 00:02:42,390
Then inside of the constructor there is the call
48
48
00:02:42,390 --> 00:02:47,180
to the parent class and so that is the superclass.
49
49
00:02:47,180 --> 00:02:49,860
And this of course is only necessary
50
50
00:02:49,860 --> 00:02:52,920
whenever we are writing a child class.
51
51
00:02:52,920 --> 00:02:56,190
So when we're using the extent keyword.
52
52
00:02:56,190 --> 00:02:58,500
And remember that this one needs to happen
53
53
00:02:58,500 --> 00:03:02,023
before we access the disc keyword in the constructor.
54
54
00:03:03,790 --> 00:03:06,800
Then here we have an instance property.
55
55
00:03:06,800 --> 00:03:09,430
And so just like public fields,
56
56
00:03:09,430 --> 00:03:13,900
the property is also available on each created object.
57
57
00:03:13,900 --> 00:03:16,830
But the difference between this one and the public field
58
58
00:03:16,830 --> 00:03:19,610
is that we set these instance properties
59
59
00:03:19,610 --> 00:03:23,200
based on input data of the constructor.
60
60
00:03:23,200 --> 00:03:26,380
So basically these properties are more personalized
61
61
00:03:26,380 --> 00:03:30,410
and unique for each object while the fields are usually
62
62
00:03:30,410 --> 00:03:33,620
for something that is common to all the objects.
63
63
00:03:33,620 --> 00:03:37,230
For example, here at the university for all of the students
64
64
00:03:37,230 --> 00:03:39,540
is the University of Lisbon.
65
65
00:03:39,540 --> 00:03:43,653
And so that is not unique to each object, okay.
66
66
00:03:44,720 --> 00:03:48,750
Then here we are redefining a private field.
67
67
00:03:48,750 --> 00:03:51,790
And so this is what we did with the pin
68
68
00:03:51,790 --> 00:03:54,930
in the bank account example, right?
69
69
00:03:54,930 --> 00:03:59,780
So this private field should be unique for each student.
70
70
00:03:59,780 --> 00:04:02,760
And so we created the private fields out there
71
71
00:04:02,760 --> 00:04:04,180
without any value.
72
72
00:04:04,180 --> 00:04:07,760
And then here we are simply redefining it to the value
73
73
00:04:07,760 --> 00:04:09,833
that is coming into the constructor.
74
74
00:04:11,400 --> 00:04:15,313
Then here, as we already know, is a normal public method.
75
75
00:04:16,640 --> 00:04:19,680
Here, we are referencing a private field
76
76
00:04:19,680 --> 00:04:22,280
and also a private method.
77
77
00:04:22,280 --> 00:04:24,703
And so about the private methods,
78
78
00:04:24,703 --> 00:04:27,120
this is how they look like.
79
79
00:04:27,120 --> 00:04:28,440
But as I mentioned,
80
80
00:04:28,440 --> 00:04:31,800
they will probably not yet work in your browser.
81
81
00:04:31,800 --> 00:04:33,940
At least if you're watching this close
82
82
00:04:33,940 --> 00:04:36,520
to the recording date of this course.
83
83
00:04:36,520 --> 00:04:40,030
So as an alternative, you can fake private methods
84
84
00:04:40,030 --> 00:04:43,873
by using the underscore convention instead of the hash.
85
85
00:04:45,150 --> 00:04:49,270
Next up, this is what a getter method looks like.
86
86
00:04:49,270 --> 00:04:52,400
And remember that a getter method is basically
87
87
00:04:52,400 --> 00:04:55,540
so that we can get a value out of an object
88
88
00:04:55,540 --> 00:04:59,800
by simply writing a property instead of writing a method.
89
89
00:04:59,800 --> 00:05:02,860
So in this case, we could simply write student.testscore
90
90
00:05:04,094 --> 00:05:07,520
and that would then run this getter method
91
91
00:05:07,520 --> 00:05:10,480
and the same for the setter method.
92
92
00:05:10,480 --> 00:05:13,740
So in this case, we can simply define the test score
93
93
00:05:13,740 --> 00:05:15,910
by setting it to some value
94
94
00:05:15,910 --> 00:05:19,450
instead of calling a test score method.
95
95
00:05:19,450 --> 00:05:22,300
And keep in mind that if you have a setter
96
96
00:05:22,300 --> 00:05:26,500
for a property that is already defined in the constructor,
97
97
00:05:26,500 --> 00:05:29,830
then you need to create basically a new property
98
98
00:05:29,830 --> 00:05:32,530
with the underscore in front of it.
99
99
00:05:32,530 --> 00:05:35,570
So again, that is kind of a convention
100
100
00:05:35,570 --> 00:05:37,720
that you should use in this case.
101
101
00:05:37,720 --> 00:05:40,320
And then in the getter with the same name,
102
102
00:05:40,320 --> 00:05:44,190
you also need to then return that new property.
103
103
00:05:44,190 --> 00:05:46,580
So we did that in one of the lectures,
104
104
00:05:46,580 --> 00:05:49,690
when we did a name validation for the name
105
105
00:05:49,690 --> 00:05:52,270
that was passed into the constructor.
106
106
00:05:52,270 --> 00:05:53,103
Remember that?
107
107
00:05:54,940 --> 00:05:58,480
Next, this is how your write static methods
108
108
00:05:58,480 --> 00:06:02,700
and a static method is available only on the class.
109
109
00:06:02,700 --> 00:06:07,230
So it cannot access the instance properties nor the methods,
110
110
00:06:07,230 --> 00:06:08,873
but only the static ones.
111
111
00:06:09,710 --> 00:06:12,460
So for example, that static public fields
112
112
00:06:12,460 --> 00:06:14,530
that we defined there in the top
113
113
00:06:14,530 --> 00:06:18,190
will of course be accessible in the static method.
114
114
00:06:18,190 --> 00:06:20,950
And usually we use these static methods
115
115
00:06:20,950 --> 00:06:23,423
as helper methods for the class.
116
116
00:06:24,670 --> 00:06:28,450
Finally, this is how you then create a new object
117
117
00:06:28,450 --> 00:06:30,650
using the new operator.
118
118
00:06:30,650 --> 00:06:33,893
And so this should be nothing new at this point for you.
119
119
00:06:35,370 --> 00:06:37,580
Now, here's just a couple of things
120
120
00:06:37,580 --> 00:06:40,020
that we need to remember about classes
121
121
00:06:40,020 --> 00:06:43,550
and that I actually already mentioned before as well.
122
122
00:06:43,550 --> 00:06:46,750
So keep in mind that classes are really just
123
123
00:06:46,750 --> 00:06:50,250
syntactic sugar over constructor functions.
124
124
00:06:50,250 --> 00:06:55,250
Also classes are not hoisted, they are first class citizens
125
125
00:06:55,300 --> 00:06:59,930
and the class body is always executed in strict mode.
126
126
00:06:59,930 --> 00:07:02,870
Okay, and there you'll have it.
127
127
00:07:02,870 --> 00:07:06,110
This is an overview and also a summary
128
128
00:07:06,110 --> 00:07:09,593
of the entire syntax of classes in JavaScript.
11542
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.