kembali ke pelajaran

Menggunakan "this" dalam penulisan objek

pentingnya: 5

Berikut ini adalah fungsi makeUser yang mengembalikan sebuah objek.

Apa hasil dari mengakses ref? Mengapa demikian?

function makeUser() {
  return {
    name: "John",
    ref: this
  };
}

let user = makeUser();

alert( user.ref.name ); // Apa hasilnya?

Jawaban: error.

Coba ini:

function makeUser() {
  return {
    name: "John",
    ref: this
  };
}

let user = makeUser();

alert( user.ref.name ); // Error: Tidak bisa membaca properti 'name' dari undefined

Hal itu karena aturan-aturan yang mengatur this tidak melihat definisi objek. Yang penting hanya momen saat panggilan terjadi.

Di sini nilai dari this dalam makeUser() adalah undefined, karena dipanggil sebagai sebuah fungsi, tidak sebagai sebuah metode dengan sintaks ???tanda titik???.

Nilai this adalah satu untuk keseluruhan fungsi, blok kode serta penulisan objek tidak mempengaruhi nilai tersebut.

Jadi ref: this sebenarnya mengambil this yang sekarang dari fungsi tersebut.

Berikut ini contoh kasus kebalikannya:

function makeUser() {
  return {
    name: "John",
    ref() {
      return this;
    }
  };
}

let user = makeUser();

alert( user.ref().name ); // John

Kini kode itu berfugsi, karena user.ref() adalah sebuah metode. Dan nilai dari this ditentukan ke objek sebelum tanda titik ..