Kata Kunci this — JavaScript

this merujuk ke objek yang "memiliki" fungsi saat dijalankan. Nilainya berubah tergantung bagaimana fungsi dipanggil. 1. Di method objek — this = objek…

this adalah kata kunci di dalam fungsi yang menunjuk sebuah object. Object mana yang ditunjuk gak ditentukan waktu fungsinya ditulis, tapi waktu fungsinya dipanggil. Mirip kata "aku": artinya tergantung siapa yang sedang ngomong.

🧪 Tebakan cepat: method greet diambil keluar dari object-nya dengan const greet = user.greet, lalu dipanggil greet(). Masih bisa menyapa Budi? Tebak dulu, jawabannya ada di bagian "Method yang dilepas dari object-nya".

this di dalam method

const user = {
  name: "Budi",
  greet() {
    return "Halo " + this.name;
  },
};

console.log(user.greet()); // Halo Budi

Patokannya: lihat cara fungsinya dipanggil, bukan tempat fungsinya ditulis. Object di kiri titik, itulah this.

Method yang dilepas dari object-nya

const greet = user.greet;
console.log(greet());
// strict mode: TypeError, karena this-nya undefined
// tanpa strict mode: "Halo ", karena this-nya window

greet() dipanggil tanpa object di kiri titik. Di strict mode (aturan JavaScript yang lebih ketat, otomatis aktif di module dan class), this jadi undefined dan this.name bikin error. Tanpa strict mode, this jadi object global window, dan namanya diam-diam kosong. Jadi jawaban tebakannya: gak bisa. Ini sering kejadian waktu method dikirim sebagai callback, misalnya setTimeout(user.greet, 1000).

Pilih this sendiri: call, apply, bind

const admin = { name: "Ani" };
console.log(user.greet.call(admin)); // Halo Ani

const greetBudi = user.greet.bind(user);
console.log(greetBudi());            // Halo Budi

Arrow function gak punya this sendiri

const kucing = {
  nama: "Oyen",
  suara: () => this.nama,
};

console.log(kucing.suara()); // undefined

Arrow function memakai this dari scope luar, yaitu tempat dia ditulis, bukan object di kiri titik. Scope luarnya di sini bukan kucing, jadi hasilnya undefined. Makanya method ditulis dengan fungsi biasa: suara() { ... }.

Sifat ini justru berguna buat callback di dalam method. Arrow di dalam mulai di bawah memakai this milik mulai, yaitu timer:

const timer = {
  detik: 3,
  mulai() {
    setTimeout(() => console.log(this.detik), 1000); // 3
  },
};

timer.mulai();

Kembalikan this supaya bisa dirantai

const langkah = {
  jumlah: 0,
  maju() {
    this.jumlah += 1;
    return this;
  },
  lihat() {
    return this.jumlah;
  },
};

console.log(langkah.maju().maju().lihat()); // 2

⚠️ Jebakan yang sering ketemu

TL;DR: Nilai this ditentukan cara fungsinya dipanggil: obj.method() berarti this adalah obj. Method yang dilepas lalu dipanggil sendirian kehilangan this-nya. call dan apply memanggil dengan this pilihanmu, bind bikin fungsi baru yang this-nya terkunci. Arrow function gak punya this sendiri dan memakai this dari scope luar, jadi jangan dipakai buat method. Method yang return this bisa dirantai: obj.a().b().

Yang akan kamu pelajari