Classes are used to create objects:
- class <––– object
Vocabulary
- instance properties => what they have instance methods => what they do
- constructor => method that is run once when the object is bring created -- used to set up your object
-
this
keyword => refers to the object created by the class (the instance)
Creating a class:
class Rectangle {
constructor (_width, _height) {
console.log("Creating a rectangle")
this.width = _width (instance property)
this.height = _height (instance property)
,, }
getArea () (instance method) {
return this.width * this.height
}
printDescription() (instance method) {
console.log(`I am rectangle a of ${this.width} x ${this.height}
}
}
Try it out:
let myRectangle1 = new Rectangle(2, 6)
let myRectangle2 = new Rectangle(10, 6)
console.log(myRectangle1.getArea())
myRectangle2.printDescription()
Getters and Setters
Getter
- Used to define methods on a class, which are then used as if they are properties
Setter
- Assign new values to instance properties
class Square {
constructor (_width) {
this.width =_width
this.height = _width
}
get area() {
return this.width * this.height
}
set area(area) {
this.width = Math.sqrt(area)
this.height = this.width
}
}
Try it out:
let square1 = new Square(4)
console.log(square1.area)
square1.area = 25 //modifies the value of square sides to 5
console.log(sqare1.width)
Static Method
- Method you can define on a class but that does not require an instance of the class to be created in order to be used
- Static method is called on the square class itself. Also called a helper method
- Does not have an object bound to them
- Does not use the
this
keyword
class Square {
constructor (_width) {
this.width = _width
this.height = _height
}
static equals (a, b) {
return a.width * a.height === b.width * b.height
}
static isValidDemensions (width, height) {
return width === height
}
}
Try it out:
let square1 = new Square(8)
let square2 = new Square(9)
console.log(square1, square2)
console.log(Square.isValidDimensions(7,6))
Inheritance with extend
- Uses the
extend
keyword - Parent class is used to create new child class
- The child class takes attributes and behavior of the parent. It will also have its own custom behavior
class Person {
constructor (_name, _age) {
this.name = _name
this.age = _age
}
describe() {
console.log(`I am ${this.name} and I am $this.age} years old.`
}
}
class Programmer extends Person { //child class Programmer of Person
constructor (_name, _age, _yearsOfExperience) {
super(_name, _age) //calls the properties from the parent class)
//custom behavior
this.yearsOfExperience = _yearsOfExperience
}
code () {
console.log(`${this.name} is coding`)
}
Try it out:
let p1 = new Person("Sheva", 45)
let programmer1 = new Programmer("Ayana", 56, 12)
const programmers = [
new Programmer("Frank", 62, 5),
new Programmer("Jane", 25, 4
];
function developSoftware (programmers) {
for (let programmer of programmers) {
programmer.code()
}
}
Polymorphism
- Act of redefining a method inside a derived child class of a parent class
- When you override a method with the one in the child class, instead of using what's in the parent class
class Animal {
constructor(name){
this.name = name
}
makeSound () {
console.log("Generic sounds")
}
}
class Dog extends Animal {
constructor(name) {
super(name)
}
makeSound() {
super.makeSound() //calls the parent class first, then child class
console.log("Woof!")
}
}
const a1 = new Animal("Dom")
a1.makeSound()
const a2 = new Dog("Jeff")
a2.makeSound()
HTML List Binding
- Creating a class that can manipulate the DOM directly
<ul id = "myList">
//<-----JavaScript List will go here----->
</ul>
<script src = "ListBinding.js"> </script>
<script type = "text/javascript">
const myList = document.getElementById("myList");
const listBinding = new ListBinding(myList);
</script>
ListBinding.js
class ListBinding {
constructor (element) {
this.listElement = element;
this.textList = ["abc", "is as easy","as 123" ]
}
//Makes an <li>text</li> element/tag
static createListItem (text) {
const li = document.createElement("li");
li.textContent = text;
return li;
update() {
// 1---- remove all existing <li> tags
while (this.listElement.firstChild) {
this.listElement.removeChild(this.listElement.firstChild)
}
// 2---- Fill <ul> tag with <li>
for (const text of this.textList) {
this.listElement.appendChild(ListBinding.createListItem(text))
}
}
}
add (text) {
this.textList.push(text)
this.update()
}
remove (index) {
this.textList.splice(index, 1);
this.update();
}
}
Freecodecamp.org Video tutorial I used:
https://youtu.be/2ZphE5HcQPQ
Top comments (0)