Bagaimana untuk Memanjangkan Fungsi dengan Kelas ES6 dan Pembolehubah Instance Akses?

Linda Hamilton
Lepaskan: 2024-10-21 06:04:02
asal
563 orang telah melayarinya

How to Extend Functions with ES6 Classes and Access Instance Variables?

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
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!