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!