ES6: Memintas Kata Kunci baharu untuk Invocation Pembina Kelas
Dalam ES6, kelas berfungsi bukan sahaja sebagai pelan tindakan untuk objek tetapi juga merangkumi pembinanya . Fungsi constructor() berfungsi sebagai badan kelas, dan pelaksanaannya dicetuskan apabila kelas dipanggil. Walau bagaimanapun, percubaan untuk memanggil kelas tanpa kata kunci baharu yang diperlukan selalunya menghasilkan mesej ralat "Tidak boleh memanggil kelas sebagai fungsi".
Memahami Kehendak Pembina
Kelas secara semula jadi terikat dengan pengendali baharu, yang memastikan bahawa tika baharu kelas dibuat selepas instantiasi. Menggunakan kelas tanpa baharu bertentangan dengan prinsip reka bentuk ini, yang membawa kepada ralat yang dinyatakan di atas.
Penyelesaian Alternatif
Jika tingkah laku yang diingini adalah untuk membenarkan panggilan kelas dengan atau tanpa baharu , beberapa alternatif wujud:
1. Menggunakan Fungsi Biasa Daripada Kelas
Fungsi biasa boleh meniru gelagat seperti kelas tanpa keperluan baharu. Ia masih boleh menguatkuasakan gelagat seperti contoh menggunakan ini, tetapi ia tidak mempunyai ciri pengkapsulan dan pewarisan kelas.
<code class="js">function Foo(x) { this.x = x; this.hello = function() { return this.x; }; }</code>
2. Menguatkuasakan Kata Kunci baharu
Jika tujuan yang dimaksudkan adalah untuk sentiasa menggunakan kelas dengan yang baharu, tidak ada keperluan untuk sebarang penyelesaian. Hanya patuhi corak doa pembina yang disyorkan:
<code class="js">(new Foo("world")).hello(); // "hello world"</code>
3. Membungkus Kelas dengan Fungsi Biasa
Pendekatan ini memberikan fleksibiliti untuk menggunakan kelas dengan atau tanpa baharu sambil mengekalkan faedah menggunakan kelas. Fungsi pembalut sentiasa memanggil pembina kelas dengan yang baharu.
<code class="js">class Foo { constructor(x) { this.x = x; } hello() { return `hello ${this.x}`; } } var _old = Foo; Foo = function(...args) { return new _old(...args) }; Foo("world").hello(); // "hello world" (new Foo("world")).hello(); // Also works</code>
Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Kelas ES6 Tanpa Kata Kunci `baru`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!