Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimanakah Panggilan Kaedah Statik Berkelakuan dalam Kelas ES6 dengan Pewarisan dan Penggantian?

Bagaimanakah Panggilan Kaedah Statik Berkelakuan dalam Kelas ES6 dengan Pewarisan dan Penggantian?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-17 17:28:02638semak imbas

How do Static Method Calls Behave in ES6 Classes with Inheritance and Overriding?

Memanggil Kaedah Statik daripada Kaedah Kelas ES6

Dalam kelas ES6, terdapat dua cara biasa untuk memanggil kaedah statik: melalui pembina atau melalui nama kelas itu sendiri. Walaupun kedua-dua pendekatan adalah sah, ia mempamerkan gelagat yang berbeza dalam konteks pewarisan dengan kaedah statik yang ditindih.

Menggunakan this.constructor untuk merujuk kepada sifat statik menghasilkan penghantaran dinamik, yang bermaksud ia merujuk kelas semasa contoh. Ini berguna apabila berurusan dengan kaedah statik yang diganti, seperti yang dilihat dalam contoh di bawah:

class Super {
  static whoami() {
    return "Super";
  }
}
class Sub extends Super {
  static whoami() {
    return "Sub";
  }
}

new Sub().whoami(); // "Sub"

Dalam kes ini, kaedah statik whoami ditindih dalam Sub kelas. Apabila dipanggil melalui this.constructor, ia merujuk kepada kelas Sub dan mengembalikan "Sub" dengan betul.

Sebaliknya, menggunakan nama kelas untuk merujuk kepada sifat statik memastikan akses berterusan kepada kaedah statik asal, walaupun ia ditindih. Contohnya:

class AnotherSuper {
  static whoami() {
    return "AnotherSuper";
  }
}
class AnotherSub extends AnotherSuper {
  static whoami() {
    return "AnotherSub";
  }
}

AnotherSub.whoami(); // "AnotherSuper"

Walaupun whoami ditindih dalam AnotherSub, memanggilnya melalui nama kelas ("AnotherSub") masih mengembalikan "AnotherSuper" kerana ia merujuk kepada sifat statik kelas AnotherSuper.

Akhirnya, pilihan pendekatan yang hendak digunakan bergantung pada tingkah laku yang diharapkan. Jika sifat statik harus sentiasa merujuk kepada kelas semasa, gunakan rujukan eksplisit (this.constructor). Jika tidak, gunakan nama kelas untuk memastikan akses berterusan kepada kaedah statik asal.

Atas ialah kandungan terperinci Bagaimanakah Panggilan Kaedah Statik Berkelakuan dalam Kelas ES6 dengan Pewarisan dan Penggantian?. 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