Classes — JavaScript

Coba bayangin kamu lagi bikin game yang ada 100 musuh di layar. Tiap musuh punya nyawa sendiri, posisi sendiri, kecepatan sendiri, tapi semua bisa method yang…

Class adalah cetakan buat bikin banyak object yang bentuknya sama. Di dalam class kamu tulis data apa yang dimiliki tiap object dan method apa yang bisa dia jalankan, lalu object-nya dibuat pakai new. Di balik layar class tetap memakai prototype dari materi sebelumnya, cuma cara menulisnya lebih ringkas.

🧪 Tebakan cepat: a dan b dibuat dari class yang sama. Kalau a.name diubah, apa b.name ikut berubah? Tebak dulu, jawabannya ada di bagian "Cetakan dengan class".

Cetakan dengan class

class Animal {
  constructor(name, sound) {
    this.name = name
    this.sound = sound
  }

  speak() {
    return `${this.name}: ${this.sound}!`
  }
}

const a = new Animal('Sapi', 'Mooo')
const b = new Animal('Bebek', 'Kwek')

console.log(a.speak()) // Sapi: Mooo!
console.log(b.speak()) // Bebek: Kwek!

Jawaban tebakan: gak. Tiap instance punya data sendiri. Yang dipakai bareng cuma method-nya, yang tinggal di Animal.prototype.

Pakai class di dalam fungsi

class PersegiPanjang {
  constructor(panjang, lebar) {
    this.panjang = panjang
    this.lebar = lebar
  }

  keliling() {
    return 2 * (this.panjang + this.lebar)
  }
}

function hitungKeliling(panjang, lebar) {
  const kotak = new PersegiPanjang(panjang, lebar)
  return kotak.keliling()
}

hitungKeliling(4, 2) // 12

Mewarisi dengan extends dan super

class Cat extends Animal {
  constructor(name, color) {
    super(name, 'Meong')
    this.color = color
  }
}

const milo = new Cat('Milo', 'oranye')
milo.speak()           // 'Milo: Meong!'
milo instanceof Cat    // true
milo instanceof Animal // true

Method static

class Suhu {
  static keFahrenheit(celsius) {
    return celsius * 9 / 5 + 32
  }
}

Suhu.keFahrenheit(100) // 212

static bikin method milik class itu sendiri, bukan milik tiap instance. Dipanggil lewat nama class, Suhu.keFahrenheit(100), bukan lewat object hasil new. Cocok buat fungsi bantu yang gak butuh data instance.

⚠️ Jebakan yang sering ketemu

TL;DR: class adalah cetakan object. constructor jalan otomatis waktu new dan menyimpan data lewat this, method ditulis tanpa function dan membaca data lewat this. Tiap instance punya data sendiri, method-nya dipakai bareng. extends mewarisi class lain, super() dipanggil pertama di constructor subclass, dan instanceof mengecek rantainya. Method static dipanggil lewat nama class.

Yang akan kamu pelajari