Memelihara Rujukan "ini" dalam Fungsi Prototaip JavaScript
Satu cabaran biasa apabila bekerja dengan prototaip JavaScript ialah mengekalkan rujukan "ini" dalam bersarang fungsi. Ini menjadi sangat penting apabila berurusan dengan acara atau panggilan balik.
Memelihara "ini" dengan "bind()":
Kaedah JavaScript bind() membolehkan kami mencipta fungsi baharu yang mengekalkan rujukan "ini" bagi fungsi asal. Ini boleh digunakan untuk memastikan bahawa kata kunci "ini" di dalam fungsi bersarang sentiasa merujuk kepada objek yang diingini.
Dalam contoh yang disediakan:
MyClass.prototype.myfunc = function() { this.element.click(function() { // Use bind() to preserve "this" // ... }.bind(this)); };
Di sini, kami menggunakan bind() untuk buat pengendali acara klik baharu yang mengekalkan rujukan "ini" objek MyClass. Ini membolehkan kami mengakses sifat MyClass, seperti "this.myValue", dalam pengendali acara.
Memelihara "ini" dengan Penutupan:
Pendekatan lain untuk memelihara "ini" adalah dengan menggunakan penutupan. Penutupan ialah fungsi yang mengekalkan akses kepada pembolehubah skop induknya, walaupun selepas skop induk selesai dilaksanakan.
Dalam contoh yang disediakan, kita boleh menggunakan penutupan untuk mengekalkan "ini":
MyClass.prototype.doSomething = function() { var that = this; // Capture "this" in a closure this.elements.each(function() { // Use "that" to access the MyClass properties // ... }); };
Dalam fungsi dalaman, kita boleh mengakses sifat MyClass dengan merujuk kepada "itu".
Elakkan Pembolehubah Global:
Secara amnya disyorkan untuk mengelak daripada menggunakan pembolehubah global untuk mengekalkan "ini" kerana ia boleh membawa kepada konflik dan pencemaran ruang nama global.
Penyelesaian Bersih dan Cekap:
Menggunakan bind() atau penutupan menyediakan cara yang bersih dan cekap untuk mengekalkan "ini" dalam fungsi prototaip JavaScript tanpa melanggar prinsip reka bentuk atau memperkenalkan kerumitan yang tidak perlu.
Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Rujukan \'ini\' dalam Fungsi Prototaip JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!