JavaScript - this Keyword (ID)

Hai teman-teman pengembang JavaScript yang bersemangat! Hari ini, kita akan memulai sebuah perjalanan menarik ke dunia kata kunci this. Sebagai guru ilmu komputer yang ramah di lingkungan Anda, saya di sini untuk mengarahkan Anda melalui konsep yang kadang-kadang sulit, tapi selalu menarik ini. Jadi, ambil minuman favorit Anda, duduk nyaman, dan mari kita masuk ke dalam!

JavaScript - this Keyword

Apa itu kata kunci 'this'?

Bayangkan Anda di sebuah pesta, dan seseorang menjerit, "Hey, kamu!" Siapa yang akan memutar badan? Semua orang, kan? Tetapi jika mereka mengatakan, "Hey, Sarah!" hanya Sarah yang akan merespon. Dalam JavaScript, kata kunci this seperti mengatakan "Hey, kamu!" kepada sebuah objek. Itu adalah cara untuk merujuk ke objek saat ini dalam konteks.

Kata kunci this adalah penanda khusus yang secara otomatis didefinisikan dalam skop setiap fungsi. Tetapi ada tangga - nilainya ditentukan oleh bagaimana fungsi itu dipanggil. Nature dinamis this ini adalah yang membuatnya sia-sia dan kadang-kadang membingungkan.

Objek mana yang 'this' merujuk ke?

Sekarang, ini adalah tempat hal-hal menjadi menarik. Objek yang this merujuk ke dapat berubah tergantung pada bagaimana dan di mana itu digunakan. Itu seperti seekor kameleon, mengubah warnanya berdasarkan lingkungannya. mari kita lihat beberapa scenario:

Sintaks

Sebelum kita masuk lebih dalam, mari kita lihat secara cepat bagaimana kita menggunakan this:

console.log(this);

Simple, kan? Tetapi jangan biarkan ke simpelannya menipu Anda. Magic (atau kesia-siaan) terjadi saat kita gunakan itu dalam konteks yang berbeda.

JavaScript 'this' dalam Skop Global

Ketika digunakan dalam skop global (di luar semua fungsi), this merujuk ke objek global. Dalam browser, itu biasanya objek window.

console.log(this === window); // true

this.myGlobalVar = "Saya global!";
console.log(window.myGlobalVar); // "Saya global!"

Di sini, this seperti kartu VIP yang memberikan Anda akses ke seluruh pesta (skop global).

JavaScript 'this' dalam Fungsi

Ketika this digunakan dalam fungsi biasa, nilainya tergantung pada bagaimana fungsi itu dipanggil.

function showThis() {
console.log(this);
}

showThis(); // window (dalam mode non-strict)

Dalam kasus ini, this seperti seekor anjing yang hilang, menempel pada apa pun yang ada di sekitarnya - yang dalam mode non-strict adalah objek global.

'this' dalam Fungsi dalam Mode Strict

Mode strict seperti guru yang ketat yang tidak membiarkan Anda melarikan diri. Dalam mode strict, this dalam fungsi adalah undefined kecuali ditetapkan secara eksplisit.

"use strict";
function strictThis() {
console.log(this);
}

strictThis(); // undefined

'this' dalam Fungsi Konstruktor

Ketika sebuah fungsi digunakan sebagai konstruktor (dengan kata kunci new), this merujuk ke objek yang baru diciptakan.

function Person(name) {
this.name = name;
this.greet = function() {
console.log("Halo, saya " + this.name);
};
}

const john = new Person("John");
john.greet(); // "Halo, saya John"

Di sini, this seperti surat kelahiran, menetapkan identitas objek yang baru lahir.

'this' dalam Fungsi Arrow

Fungsi arrow adalah seperti rebel di dunia JavaScript. Mereka tidak mengikat this mereka sendiri tapi mewarisi itu dari skop yang mengelilingi.

const obj = {
name: "Alice",
sayHello: () => {
console.log("Halo, " + this.name);
}
};

obj.sayHello(); // "Halo, undefined"

Dalam kasus ini, this dalam fungsi arrow tidak merujuk ke obj, tapi ke skop sekitarnya (mungkin skop global).

'this' dalam Metode Objek

Ketika this digunakan dalam metode (sebuah fungsi yang merupakan properti dari objek), itu merujuk ke objek yang metode itu dipanggil.

const car = {
brand: "Toyota",
getBrand: function() {
return this.brand;
}
};

console.log(car.getBrand()); // "Toyota"

Di sini, this seperti butler yang setia, selalu merujuk ke tuannya (objek).

'this' dalam Fungsi Anak dari Metode Objek

Ini adalah tempat hal-hal bisa menjadi sulit. Dalam fungsi dalam metode, this tidak lagi merujuk ke objek.

const restaurant = {
name: "Tasty Treats",
getMenu: function() {
function displayName() {
console.log(this.name);
}
displayName();
}
};

restaurant.getMenu(); // undefined

Dalam kasus ini, this dalam displayName() merujuk ke objek global, bukan restaurant.

JavaScript 'this' dalam Penangan Event

Dalam penangan event, this biasanya merujuk ke elemen yang menerima event.

<button id="myButton">Klik saya!</button>

<script>
document.getElementById("myButton").addEventListener("click", function() {
console.log(this); // <button id="myButton">Klik saya!</button>
});
</script>

Di sini, this seperti lampu sorot, fokus pada bintang pertunjukan - elemen yang diklik.

Pengikatan Fungsi Eksplisit dalam JavaScript

Kadang-kadang, kita ingin menjadi bos dan katakan kepada this betapa ia seharusnya. Kita bisa melakukan ini menggunakan call(), apply(), atau bind().

const person1 = { name: "Alice" };
const person2 = { name: "Bob" };

function sayHello() {
console.log("Halo, " + this.name);
}

sayHello.call(person1); // "Halo, Alice"
sayHello.apply(person2); // "Halo, Bob"

const boundHello = sayHello.bind(person1);
boundHello(); // "Halo, Alice"

Metode-metode ini seperti seorang sutradara, memberitahu this betapa perannya harus dimainkan.

Precedence 'this' JavaScript

Sekarang, mari kita rangkum precedence pengikatan this:

Aturan Precedence
Kata kunci new 1 (Teratas)
Pengikatan eksplisit (call, apply, bind) 2
Panggilan metode 3
Panggilan fungsi 4 (Terendah)

Ingat, fungsi arrow adalah khusus dan selalu mewarisi this dari skop sekitarnya.

Dan itu adalah nya, teman-teman! Kita telah menjelajahi negeri this, mengexplorekan berbagai wajah dan keunikan nya. Ingat, memahami this seperti belajar menunggang sepeda - mungkin saja wobble di awal, tapi dengan latihan, Anda akan berjalan cepat dalam waktu singkat. Tetap coding, tetap menjelajahi, dan yang paling penting, tetap bersenang-senang dengan JavaScript!

Credits: Image by storyset