Prototypes — JavaScript

Di lesson berikutnya kamu akan belajar class — tapi sebelum itu, penting untuk tahu apa yang sebenarnya bekerja di balik layar. Jawabannya: prototypes. Kenapa…

Setiap object di JavaScript punya prototype: object lain tempat dia ikut mencari properti yang gak dia punya sendiri. Kalau sebuah properti gak ketemu di object itu, JavaScript mencarinya di prototype-nya, lalu di prototype milik prototype itu, terus naik sampai ujung. Jalur pencarian ini disebut prototype chain.

🧪 Tebakan cepat: object kucing di bawah gak punya method toString, tapi kucing.toString() tetap jalan. Method itu datang dari mana? Tebak dulu, jawabannya ada di bagian "Mencari naik ke prototype".

Mencari naik ke prototype

function Hewan(nama) {
  this.nama = nama
}

Hewan.prototype.sapa = function () {
  return 'Saya ' + this.nama
}

const kucing = new Hewan('Kitty')

kucing.nama       // 'Kitty', milik kucing sendiri
kucing.sapa()     // 'Saya Kitty', ketemu di Hewan.prototype
kucing.toString() // '[object Object]', ketemu di Object.prototype
kucing.terbang    // undefined, gak ketemu di mana pun

Rantainya: kucing → Hewan.prototype → Object.prototype → null. Object.prototype ada di ujung hampir semua rantai, dan di situlah toString tinggal. Itu jawaban tebakan. Kalau sampai null masih gak ketemu, hasilnya undefined.

Demo di bawah memakai class, cara menulis yang lebih ringkas buat pola yang sama (dibahas di materi berikutnya). Rantainya dog → Dog.prototype → Animal.prototype → Object.prototype → null.

Method di prototype, data di constructor

const a = new Hewan('Kitty')
const b = new Hewan('Mochi')

a.sapa === b.sapa              // true, satu fungsi yang sama
a.__proto__ === Hewan.prototype // true

⚠️ Jebakan yang sering ketemu

TL;DR: Tiap object punya prototype, dan properti yang gak ketemu dicari naik lewat prototype chain sampai null. Constructor function dipanggil dengan new, menyimpan data lewat this, dan method-nya ditaruh sekali di NamaFungsi.prototype pakai function. Link ke prototype tersimpan di __proto__, dan Object.prototype di ujung rantai menyediakan method seperti toString.

Yang akan kamu pelajari