Rumah > hujung hadapan web > tutorial js > 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
Lepaskan: 2024-11-17 17:28:02
asal
687 orang telah melayarinya

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

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

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!

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