DEV Community

Jasterix
Jasterix

Posted on

Intro to JavaScript Classes

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}
   }
}
Enter fullscreen mode Exit fullscreen mode
Try it out:
let myRectangle1 = new Rectangle(2, 6)
let myRectangle2 = new Rectangle(10, 6)

console.log(myRectangle1.getArea())
myRectangle2.printDescription()


Enter fullscreen mode Exit fullscreen mode

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
  }
}
Enter fullscreen mode Exit fullscreen mode
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)
Enter fullscreen mode Exit fullscreen mode

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
  }
}
Enter fullscreen mode Exit fullscreen mode
Try it out:
let square1 = new Square(8)
let square2 = new Square(9)

console.log(square1, square2)
console.log(Square.isValidDimensions(7,6))
Enter fullscreen mode Exit fullscreen mode

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`)
  }
Enter fullscreen mode Exit fullscreen mode

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()
  }
}

Enter fullscreen mode Exit fullscreen mode

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!")
  }
}
Enter fullscreen mode Exit fullscreen mode
const a1 = new Animal("Dom")
a1.makeSound()

const a2 = new Dog("Jeff")
a2.makeSound()
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode
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();
  }
}
Enter fullscreen mode Exit fullscreen mode

Freecodecamp.org Video tutorial I used:

https://youtu.be/2ZphE5HcQPQ

Latest comments (0)