Memperluas Fungsi dengan Kelas ES6
ES6 memperkenalkan keupayaan untuk memanjangkan objek khas seperti objek Fungsi. Ini membolehkan kami mencipta kelas yang mewarisi daripada fungsi dan berkelakuan seperti fungsi apabila dipanggil. Walau bagaimanapun, melaksanakan logik untuk panggilan sedemikian memerlukan pertimbangan yang teliti.
Memahami Prototaip Fungsi
Apabila memanggil kelas sebagai fungsi, kata kunci ini merujuk kepada objek global (tetingkap dalam persekitaran penyemak imbas) dan bukannya contoh kelas. Untuk mengakses contoh kelas, kami tidak boleh menggunakan panggilan super() tradisional, kerana ia menjangkakan rentetan kod untuk pembina Fungsi.
Pengerasan Nilai
Satu pendekatan adalah untuk mengeraskan nilai ke dalam pembina:
class Smth extends Function { constructor(x) { super("return " + JSON.stringify(x) + ";"); } } (new Smth(256))() // Returns 256
Walau bagaimanapun, ini tidak sesuai kerana ia bergantung pada nilai berkod keras.
Memanfaatkan Penutupan
Untuk mendayakan penutupan yang boleh mengakses pembolehubah contoh, kita boleh mencipta fungsi bersarang dalam pembina:
class Smth extends Function { constructor(x) { // Refer to `smth` instead of `this` function smth() { return x; } Object.setPrototypeOf(smth, Smth.prototype); return smth; } } (new Smth(256))() // Returns 256
Abstraksi dengan ExtensibleFunction
Untuk mengabstraksikan corak ini, kita boleh mencipta kelas ExtensibleFunction:
class ExtensibleFunction extends Function { constructor(f) { return Object.setPrototypeOf(f, new.target.prototype); } } class Smth extends ExtensibleFunction { constructor(x) { super(function() { return x; }); } } (new Smth(256))() // Returns 256
Pendekatan ini menyediakan cara yang boleh digunakan semula untuk mencipta fungsi yang boleh diperluas dengan akses kepada pembolehubah contoh.
Atas ialah kandungan terperinci Bagaimana untuk Memanjangkan Fungsi dengan Kelas ES6 dan Pembolehubah Instance Akses?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!