DEV Community

Jasterix
Jasterix

Posted on

4

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

SurveyJS custom survey software

Simplify data collection in your JS app with a fully integrated form management platform. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more. Integrates with any backend system, giving you full control over your data and no user limits.

Learn more

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more