class keyword. It is basically a new syntax that does the exact same thing as the object constructors and prototypes we learned about in the constructor lesson.
There is a bit of controversy about using the class syntax, however. Opponents argue that
class is basically just syntactic sugar over the existing prototype-based constructors and that it’s dangerous and/or misleading to obscure what’s really going on with these objects. Despite the controversy, classes are beginning to crop up in real code bases that you are almost certainly going to encounter such as frameworks like React (especially if you end up working with class-based React code).
Since we’ve already gone fairly in-depth with Constructors, you don’t have too much left to learn here beyond the new syntax. If you choose to use classes in your code (that’s fine!) you can use them much the same way as object constructors.
This section contains a general overview of topics that you will learn in this lesson.
- Explain the differences between an object constructor and a class.
- Explain what “getters” and “setters” are.
- Understand what computed names and class fields are.
- Explain how to implement private class fields and methods.
- Describe function binding.
- Use inheritance with classes.
- Understand why composition is generally preferred to inheritance.
This article is probably just about all you need to start using
The MDN docs are, as usual, a great resource for going a little deeper. Look especially at the ‘extends’ reference page, including the ‘Mixins’ section. In some frameworks like React, you can use classes to create your components and make them
extendthe core React component which gives you access to all their built-in functionality (though this is not the only way to create components. This will all be covered later in React section of the course). Classes can also have private features that allow you to implement privacy similarly to factory functions.
Classes can have static properties and methods which are properties and methods that are accessed on the class itself and not on the instance of a class. This is similar to how some string methods are accessed on the instance of a string itself e.g.
someString.slice(0, 5)whereas some methods are called on the String constructor directly e.g.
String.fromCharCode(79, 100, 105, 110).
Read this article covering opinions regarding the pros and cons of classes. FunFunFunction’s video on Composition over Inheritance elaborates on the cons mentioned in the article and does a great job of going over the topic.
Go back to your Library project and refactor it to use
class instead of plain constructors. Don’t forget to use the git workflow you learned in this foundations lesson to work on a new feature. You should get used to working like this!
This section contains questions for you to check your understanding of this lesson. If you’re having trouble answering the questions below on your own, review the material above to find the answer.
- Explain the differences between object constructors and classes.
- What are “getters” & “setters”?
- Describe computed names and class fields.
- Describe function binding.
- Describe static properties.
- Describe private class features.
- How is inheritance used with classes?
- Why is favoring Composition over Inheritance suggested?
This section contains helpful links to other content. It isn’t required, so consider it supplemental.
- This playlist from Stephen Mayeux, explains ES6 Classes and some of their methods with easy to follow examples.