Bagaimana untuk Menggunakan Kelas ES6 Tanpa Kata Kunci `baru`?

Susan Sarandon
Lepaskan: 2024-10-26 03:18:02
asal
461 orang telah melayarinya

 How to Invoke ES6 Classes Without the `new` Keyword?

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

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

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

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!

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!