Warisan Berasaskan Prototaip: Menyelidiki Peranan Kata Kunci 'baharu'
Apabila melanjutkan kelas Widget dengan fungsi baharu bernama WeatherWidget, tugasan prototaip:
WeatherWidget.prototype = new Widget;
memainkan peranan yang penting. Kata kunci 'baharu' memanggil pembina Widget dan memberikan nilai pulangannya kepada sifat prototaip WeatherWidget.
Jika diabaikan, tindakan ini akan menimbulkan ralat atau mungkin mencemarkan ruang nama global. Dengan menggunakan 'baharu', pembina Widget digunakan, memastikan permulaan yang betul dan nilai pulangan yang sah.
Walau bagaimanapun, pendekatan ini mencipta senario di mana semua tika WeatherWidget mewarisi sifat daripada tika Widget yang sama, berkongsi nilai antara mereka sendiri . Ini mungkin tidak sejajar dengan prinsip warisan.
Untuk membetulkan isu ini dan melaksanakan warisan berasaskan kelas sebenar, langkah berikut perlu diambil:
function Dummy () {} Dummy.prototype = Widget.prototype;
WeatherWidget.prototype = new Dummy();
WeatherWidget.prototype.constructor = WeatherWidget;
Pendekatan ini memastikan kejadian WeatherWidget mewarisi sifat melalui rantaian prototaip tanpa berkongsi nilai sesama mereka.
Untuk penyelesaian yang lebih ringkas dalam ECMAScript Ed. 5 dan kemudian, pertimbangkan untuk menggunakan:
WeatherWidget.prototype = Object.create(Widget.prototype, { constructor: {value: WeatherWidget} });
Sebagai alternatif, untuk pelaksanaan pewarisan umum, terokai Function.prototype.extend(). Kaedah ini membolehkan penambahan prototaip mudah dan menyediakan fungsi akses 'super' yang mudah untuk menggunakan kaedah induk.
Atas ialah kandungan terperinci Bagaimanakah Kata Kunci `baru` Memberi Impak kepada Warisan Berasaskan Prototaip dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!