Bolehkah Anda Memanggil Pembina Kelas Tanpa Kata Kunci \'baharu\' dalam JavaScript?

Barbara Streisand
Lepaskan: 2024-10-26 04:12:27
asal
120 orang telah melayarinya

 Can You Call a Class Constructor Without the 'new' Keyword in JavaScript?

Meminta Pembina Kelas tanpa Kata Kunci 'baharu'

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

Secara intuitif, seseorang mungkin menjangkakan kod berikut berfungsi:

<code class="javascript">Foo("world").hello();       // "hello world"</code>
Salin selepas log masuk

Walau bagaimanapun, percubaan ini gagal dengan ralat "Tidak boleh memanggil kelas sebagai fungsi."

Peranan Pembina Kelas

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.

Mengabaikan Kata Kunci 'baharu': Penyelesaian dan Tukar Ganti

Terdapat tiga pendekatan utama untuk mengatasi sekatan ini:

1. Fungsi Biasa

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

2. Menguatkuasakan Kata Kunci 'baharu'

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

3. Fungsi Pembalut

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

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!

sumber:php.cn
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!