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…

Di lesson berikutnya kamu akan belajar class — tapi sebelum itu, penting untuk tahu apa yang sebenarnya bekerja di balik layar. Jawabannya: prototypes. Kenapa penting? Karena hampir semua kebingungan soal this, inheritance, dan instanceof di JavaScript berakar di sini. Paham prototype = paham fondasinya.

Ide Inti

Setiap object JavaScript punya satu link tersembunyi ke object lain — itu disebut prototype-nya. Kalau kamu mencari property di suatu object dan tidak ketemu, JS otomatis cek ke prototype-nya. Kalau masih tidak ketemu, cek prototype dari prototype. Begitu seterusnya, sampai menemukan null.

Contoh Sederhana

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

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

const kucing = new Hewan("Kitty");
kucing.sapa(); // "Saya Kitty"

kucing tidak punya method sapa sendiri — method itu hidup di Hewan.prototype. JavaScript menemukannya lewat prototype chain.

Prototype Chain

kucing.sapa();     // ditemukan di Hewan.prototype
kucing.toString(); // ditemukan di Object.prototype
kucing.terbang;    // undefined (tidak ada di chain manapun)

Kenapa Ini Penting untuk Lesson Berikutnya

class di JavaScript hanyalah syntactic sugar untuk pola prototype di atas. Kode berikut identik secara semantik:

// Pakai class (ES6+)
class Hewan {
  constructor(nama) { this.nama = nama; }
  sapa() { return "Saya " + this.nama; }
}

Saat kamu menulis class, JavaScript tetap bikin function dan prototype di baliknya. Jadi ketika nanti di lesson Classes kamu ketemu istilah seperti "method lives on the prototype" — sekarang kamu tahu persis apa artinya.

Method penting:

<title id="proto-t">Prototype chain: instance naik ke prototype, naik lagi ke Object.prototype, sampai null.</title>Prototype Chain — silsilah pencarian propertykucing (instance){ nama: "Kitty" }__proto__Hewan.prototype{ sapa() {...} }__proto__Object.prototype{ toString, ... }nullkucing.sapa()→ tidak di sini→ ketemu! ✓
JS naik chain sampai ketemu, atau sampai null (return undefined).

🎭 Analogi sehari-hari

Prototype chain = silsilah keluarga. Anak butuh sesuatu? Cek ke ayah dulu. Tidak ada? Cek kakek. Tidak ada juga? Cek buyut. Sampai ujung silsilah (null). Kalau ketemu, ambil. Kalau habis silsilah, return undefined.

Object.prototype = nenek moyang semua object — di situ toString, hasOwnProperty, dll hidup.

⚠️ Jebakan yang sering ditemui

TL;DR: Tiap object punya link tersembunyi __proto__ ke object lain — itu prototype chain. Cari property tidak ketemu → JS naik chain otomatis sampai ketemu atau null. class JavaScript = syntactic sugar di atas pattern ini. Method di Hewan.prototype = shared antar semua instance (hemat memory). instanceof cek chain. Jangan modify Object.prototype (global pollution). Pakai Object.getPrototypeOf(), bukan __proto__ deprecated.

Yang akan kamu pelajari