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

Bolehkah Anda Memanggil Pembina Kelas Tanpa \'baharu\' dalam ES6?

Susan Sarandon
Susan Sarandonasal
2024-10-26 01:55:02296semak imbas

 Can You Call a Class Constructor Without 'new' in ES6?

Panggil Pembina Kelas Tanpa Kata Kunci baharu dalam ES6

Memandangkan takrifan kelas:

class Foo {
  constructor(x) {
    if (!(this instanceof Foo)) return new Foo(x);
    this.x = x;
  }
  hello() {
    return `hello ${this.x}`;
  }
}

Tidak mungkin untuk terus memanggil pembina kelas tanpa kata kunci baharu. Ini kerana kelas dalam ES6 sememangnya mempunyai fungsi pembina yang digunakan apabila kelas dipanggil.

Menyebut kelas tanpa keputusan baharu dalam ralat:

Cannot call a class as a function

Mesej ralat ini menunjukkan dengan jelas bahawa pembina kelas hanya boleh dipanggil dengan operator baharu, yang diperlukan untuk mencipta tika baharu kelas.

Untuk mengatasi had ini, pertimbangkan pendekatan berikut:

  • Gunakan fungsi biasa sebaliknya:
function Foo(x) {
  this.x = x;
  this.hello = function() {
    return `hello ${this.x}`;
  }
}
  • Sentiasa panggil kelas dengan baharu:
(new Foo("world")).hello(); // "hello world"
  • Balut kelas dalam fungsi dan panggil dengan baharu:
var FooWrapper = function(...args) { return new Foo(...args) };
FooWrapper("world").hello(); // "hello world"

Atas ialah kandungan terperinci Bolehkah Anda Memanggil Pembina Kelas Tanpa \'baharu\' dalam ES6?. 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