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

Linda Hamilton
Lepaskan: 2024-10-22 16:51:03
asal
874 orang telah melayarinya

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();
    Salin selepas log masuk
  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();
    Salin selepas log masuk
  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();
    Salin selepas log masuk
  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
    Salin selepas log masuk

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
    Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!