ES6 membenarkan lanjutan objek khas, termasuk objek Fungsi. Ini bermakna bahawa adalah mungkin untuk mewarisi dari objek Fungsi dan mencipta objek yang boleh dipanggil sebagai fungsi. Walau bagaimanapun, melaksanakan logik untuk panggilan ini boleh mencabar, kerana gelagat ini apabila memanggil fungsi sebagai fungsi adalah berbeza daripada apabila memanggilnya sebagai kaedah.
Menggunakan Penutupan untuk Mengakses Data Contoh
Pendekatan tradisional untuk masalah ini adalah dengan menggunakan penutupan. Penutupan ialah fungsi yang mempunyai akses kepada persekitaran di mana ia dicipta. Ini membolehkan fungsi mengakses data contoh kelas walaupun ia dipanggil sebagai fungsi.
<code class="js">class Smth extends Function { constructor(x) { super(() => { return x; }); } }</code>
Menggunakan Fungsi Sambungan
Pendekatan lain ialah dengan gunakan fungsi sambungan. Fungsi sambungan ialah fungsi yang boleh digunakan untuk melanjutkan tingkah laku objek sedia ada. Dalam kes ini, kami boleh menggunakan fungsi sambungan untuk mencipta versi lanjutan bagi objek Fungsi yang akan membolehkan kami mengakses data tika apabila objek dipanggil sebagai fungsi.
<code class="js">class ExtensibleFunction extends Function { constructor(f) { return Object.setPrototypeOf(f, new.target.prototype); } } class Smth extends ExtensibleFunction { constructor(x) { super(() => { return x; }); } }</code>
Pendekatan ini lebih fleksibel daripada menggunakan penutupan, kerana ia boleh digunakan untuk melanjutkan sebarang fungsi, bukan hanya objek Fungsi.
Dengan menggunakan teknik ini, adalah mungkin untuk melanjutkan objek Fungsi dengan kelas ES6 dan melaksanakan logik tersuai untuk panggilan fungsi .
Atas ialah kandungan terperinci Bagaimana untuk Memanjangkan Objek Fungsi dengan Kelas ES6 Menggunakan Penutupan dan Fungsi Sambungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!