Rumah  >  Artikel  >  hujung hadapan web  >  Adakah Operator \"ini\" Sentiasa Merujuk kepada Objek Yang Dimaksudkan dalam JavaScript?

Adakah Operator \"ini\" Sentiasa Merujuk kepada Objek Yang Dimaksudkan dalam JavaScript?

Linda Hamilton
Linda Hamiltonasal
2024-10-22 16:51:03877semak imbas

Does the

Gelagat Tidak Konsisten Operator "ini" dalam JavaScript

Operator "ini" dalam JavaScript boleh mempamerkan tingkah laku yang tidak konsisten disebabkan rujukannya yang berubah nilai bergantung pada konteks doa. Ini boleh menjadi masalah terutamanya apabila menggunakan kaedah objek sebagai fungsi panggil balik.

Corak Invokasi dan "ini"

Fungsi JavaScript boleh digunakan dalam empat cara:

  1. Sebagai kaedah: Apabila dipanggil sebagai kaedah dalam objek, "ini" merujuk kepada objek itu sendiri.

    const obj = {
      method() {
     console.log(this); // Logs the object
      },
    };
    
    obj.method();
  2. Sebagai fungsi: Apabila dipanggil tanpa konteks tertentu, "ini" merujuk kepada objek global, biasanya objek tetingkap dalam penyemak imbas.

    function fn() {
      console.log(this); // Logs the window object
    }
    
    fn();
  3. Sebagai pembina: Apabila dipanggil menggunakan kata kunci baharu, "ini" merujuk kepada contoh kelas yang baru dibuat.

    class MyClass {
      constructor() {
     console.log(this); // Logs an instance of MyClass
      }
    }
    
    new MyClass();
  4. Dengan kaedah guna: Panggilan balik menggunakan corak seruan ini. "ini" boleh ditentukan dengan menghantar hujah pertama sebagai objek rujukan.

    const obj = {
      method() {
     console.log(this); // Logs the object
      },
    };
    
    const fn = obj.method.bind(obj);
    fn(); // Logs the object

Gelagat Tidak Konsisten dalam Panggilan Balik

Ketidakkonsistenan timbul apabila kaedah sesuatu objek digunakan sebagai fungsi panggil balik. Oleh kerana panggilan balik digunakan sebagai fungsi, "ini" akan merujuk kepada objek global. Walau bagaimanapun, jangkaan adalah bahawa ia harus merujuk kepada objek yang dimiliki oleh kaedah tersebut.

Amalan Terbaik

Untuk mengelakkan ketidakkonsistenan ini, amalan terbaik berikut disyorkan:

  • Gunakan Fungsi Anak Panah: Fungsi anak panah mempunyai skop leksikal tersirat, bermakna ia mewarisi ikatan "ini" daripada konteks sekeliling. Ini menghapuskan keperluan untuk pengikatan yang jelas.

    const obj = {
    method() {
      console.log(this); // Logs the object
    },
    };
    
    const fn = obj.method.bind(obj);
    setTimeout(fn, 1000); // Logs the object

Atas ialah kandungan terperinci Adakah Operator \"ini\" Sentiasa Merujuk kepada Objek Yang Dimaksudkan dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn