Masalah:
Dalam JavaScript prototaip, apabila mentakrifkan fungsi dalam prototaip, skop berubah dan nilai "ini" mungkin tidak lagi merujuk kepada contoh kelas. Ini boleh menjadikannya mencabar untuk mengakses sifat dan kaedah objek asal.
Penyelesaian: Menggunakan Kaedah bind()
Kaedah bind() membenarkan pembangun untuk mengekalkan konteks "ini" dalam fungsi prototaip. Ia mengembalikan fungsi baharu dengan konteks yang ditentukan terikat sebagai argumen pertamanya, manakala argumen yang selebihnya dihantar ke fungsi asal.
MyClass.prototype.myfunc = function() { this.element.click((function() { // ... }).bind(this)); };
Dalam contoh ini, kaedah bind() digunakan untuk mengekalkan konteks daripada "ini" dalam fungsi tanpa nama yang diberikan kepada pengendali acara klik.
Contoh dengan Berbilang Prototaip Fungsi:
Menggunakan bind() menghapuskan keperluan untuk menyimpan rujukan secara eksplisit kepada "ini" dalam setiap fungsi prototaip. Contohnya:
MyClass.prototype.doSomething = function() { // operate on the element }.bind(this);
Dengan menggunakan bind() dalam takrifan doSomething, konteks "ini" dipelihara secara automatik untuk semua kejadian kelas.
Mengelakkan Global Pembolehubah:
Menggunakan pembolehubah global untuk memegang rujukan kepada "ini" tidak disyorkan kerana ia mencemarkan ruang nama global dan menghalang berbilang contoh kelas daripada dicipta tanpa mengganggu satu sama lain. Kaedah bind() menawarkan penyelesaian yang lebih cekap dan bersih.
Kesimpulan
Kaedah bind() menyediakan cara yang berkesan untuk mengekalkan konteks "ini" dalam fungsi prototaip, menghapuskan keperluan untuk rujukan manual dan pembolehubah global. Pendekatan ini meningkatkan kebolehbacaan kod, kebolehselenggaraan dan fleksibiliti dalam aplikasi JavaScript prototaip.
Atas ialah kandungan terperinci Bagaimanakah anda boleh mengekalkan konteks \'ini\' dalam fungsi prototaip JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!