Rumah >hujung hadapan web >tutorial js >Bolehkah Anda Memanggil Pembina Kelas Tanpa Kata Kunci \'baharu\' dalam JavaScript?
Dalam ES6, kelas menyediakan sintaks ringkas untuk enkapsulasi dan warisan. Walau bagaimanapun, memanggil pembina kelas tanpa kata kunci 'baharu' boleh menjadi batu penghalang.
Pertimbangkan kelas berikut:
<code class="javascript">class Foo { constructor(x) { if (!(this instanceof Foo)) return new Foo(x); this.x = x; } hello() { return `hello ${this.x}`; } }</code>
Secara intuitif, seseorang mungkin menjangkakan kod berikut berfungsi:
<code class="javascript">Foo("world").hello(); // "hello world"</code>
Walau bagaimanapun, percubaan ini gagal dengan ralat "Tidak boleh memanggil kelas sebagai fungsi."
Dalam JavaScript, kelas mentakrifkan " badan kelas" yang berfungsi sebagai pembina. Pembina ini digunakan apabila kelas dipanggil, mencipta contoh kelas. Oleh itu, adalah penting untuk menggunakan kata kunci 'baharu' untuk memulakan pembina dan mencipta objek baharu.
Terdapat tiga pendekatan utama untuk mengatasi sekatan ini:
Daripada menggunakan kelas, seseorang boleh mentakrifkan fungsi biasa yang berkelakuan serupa.
<code class="javascript">function Foo(x) { if (!(this instanceof Foo)) return new Foo(x); this.x = x; this.hello = function() { return this.x; } }</code>
Untuk memastikan kelas sentiasa digunakan dengan kata kunci 'baharu', seseorang boleh melaksanakan semakan dalam pembina:
<code class="javascript">class Foo { constructor(x) { if (!(this instanceof Foo)) throw new Error("Class must be invoked with 'new'"); this.x = x; } hello() { return `hello ${this.x}`; } }</code>
Dengan membungkus kelas di dalam fungsi biasa, ia menjadi mungkin untuk menggunakan kedua-dua dengan dan tanpa kata kunci 'baharu'.
<code class="javascript">class Foo { constructor(x) { this.x = x; } hello() { return `hello ${this.x}`; } } var _old = Foo; Foo = function(...args) { return new _old(...args) };</code>
Setiap penyelesaian memaparkan pertukarannya sendiri . Fungsi biasa kekurangan enkapsulasi dan faedah warisan kelas, manakala kata kunci 'baharu' yang dikuatkuasakan mungkin menyekat kefleksibelan dalam senario tertentu. Pendekatan fungsi pembalut mencapai keseimbangan antara kedua-dua pilihan.
Atas ialah kandungan terperinci Bolehkah Anda Memanggil Pembina Kelas Tanpa Kata Kunci \'baharu\' dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!