Rumah >hujung hadapan web >tutorial js >Mengapa `bind()` Tidak Berfungsi dengan Fungsi Anak Panah?

Mengapa `bind()` Tidak Berfungsi dengan Fungsi Anak Panah?

DDD
DDDasal
2024-12-09 03:10:17812semak imbas

Why Doesn't `bind()` Work with Arrow Functions?

Mengikat 'ini' dalam Fungsi Anak Panah

Fungsi anak panah, yang diperkenalkan dalam ES6, telah menjadi popular kerana sintaksnya yang ringkas. Walau bagaimanapun, satu had fungsi anak panah ialah ketidakupayaan mereka untuk mengikat semula 'ini'. Tidak seperti fungsi biasa, fungsi anak panah mewarisi pengikatan 'ini' daripada konteks sekeliling pada masa definisi.

Dalam contoh yang disediakan, fungsi anak panah:

var f = () => console.log(this);

ditakrifkan dalam skop global. Oleh itu, 'ini' merujuk kepada objek tetingkap global, bukan kepada objek 'o' yang kami cuba untuk mengikat fungsi:

var fBound = f.bind(o);
fBound(); // Logs the window object

Untuk menyelesaikan isu ini, jangan gunakan fungsi anak panah. Sebaliknya, tentukan fungsi biasa:

var f = function() {
  console.log(this);
}.bind(o);

f(); // Logs the 'o' object

Dalam kes ini, pengikatan 'ini' ditetapkan dengan betul kepada objek 'o' kerana fungsi biasa digunakan, membenarkan pengikatan ditetapkan semula.

Atas ialah kandungan terperinci Mengapa `bind()` Tidak Berfungsi dengan Fungsi Anak Panah?. 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