Rumah  >  Artikel  >  hujung hadapan web  >  Bolehkah Anda Memanggil Pembina Kelas Tanpa Kata Kunci \'baharu\' dalam JavaScript?

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

Barbara Streisand
Barbara Streisandasal
2024-10-26 04:12:27121semak imbas

 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>

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."

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>

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>

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>

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!

Kenyataan:
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