Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Memanggil Kaedah Statik daripada Kaedah Kelas ES6 Bukan Statik?

Bagaimana untuk Memanggil Kaedah Statik daripada Kaedah Kelas ES6 Bukan Statik?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-28 01:03:11317semak imbas

How to Call Static Methods from Non-Static ES6 Class Methods?

Memanggil Kaedah Statik daripada Kaedah Kelas ES6 Bukan Statik

Apabila bekerja dengan kelas ES6, anda mungkin menghadapi keperluan untuk mengakses kaedah statik daripada dalam kaedah kelas bukan statik. Terdapat dua pilihan utama untuk mencapai ini: menggunakan pembina atau merujuk kepada nama kelas secara langsung. Walaupun mana-mana kaedah berdaya maju secara teknikal, ia mempamerkan gelagat yang berbeza dalam konteks pewarisan dengan kaedah statik yang ditindih.

Pilihan 1: Menggunakan Pembina

class SomeObject {
  constructor(n) {
    this.n = n;
  }

  static print(n) {
    console.log(n);
  }

  printN() {
    this.constructor.print(this.n);
  }
}

Dalam ini contoh, cetakan kaedah statik diakses melalui pembina this.constructor. Pendekatan ini memastikan kaedah statik yang betul digunakan, walaupun kelas dilanjutkan dan kaedah statik ditindih dalam subkelas.

Pilihan 2: Merujuk kepada Nama Kelas Secara Terus

class SomeObject {
  constructor(n) {
    this.n = n;
  }

  static print(n) {
    console.log(n);
  }

  printN() {
    SomeObject.print(this.n);
  }
}

Dalam kes ini, cetakan kaedah statik dirujuk oleh nama kelasnya. Kaedah ini pada asasnya statik dan sentiasa mengembalikan nilai asal yang ditakrifkan dalam kelas, tanpa mengira sebarang perhubungan warisan.

Pertimbangan Warisan dan Override

Pilihan antara menggunakan pembina atau nama kelas secara langsung menjadi penting apabila berurusan dengan warisan dan kaedah statik yang ditindih, seperti yang digambarkan di bawah:

class Super {
  static whoami() {
    return "Super";
  }
  lognameA() {
    console.log(Super.whoami());
  }
  lognameB() {
    console.log(this.constructor.whoami());
  }
}
class Sub extends Super {
  static whoami() {
    return "Sub";
  }
}

Kes 1: Menggunakan Super.whoami()

  • Sub().lognameA(); mencetak "Super", kerana ia merujuk kepada kaedah statik yang ditakrifkan dalam kelas Super.
  • Sub().lognameB(); juga mencetak "Super", kerana ia menggunakan rujukan pembina dan subkelas tidak mewarisi kaedah whoami yang diganti.

Kes 2: Menggunakan this.constructor.whoami()

  • Sub().nama logA(); mencetak "Sub", kerana ia merujuk secara langsung kaedah statik dalam subkelas semasa.
  • Sub().lognameB() baharu; mencetak "Sub" atas sebab yang sama.

Gelagat dalam senario ini mungkin berbeza-beza bergantung pada sama ada kaedah statik sebenarnya ditindih atau tidak. Merujuk sifat statik melalui nama kelas memberikan gelagat statik yang benar, sambil menggunakan this.constructor membolehkan pertimbangan penghantaran dan warisan dinamik. Memilih kaedah yang sesuai bergantung pada tingkah laku yang diingini dalam konteks yang diberikan.

Atas ialah kandungan terperinci Bagaimana untuk Memanggil Kaedah Statik daripada Kaedah Kelas ES6 Bukan Statik?. 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