ホームページ >ウェブフロントエンド >jsチュートリアル >「new」キーワードは JavaScript のプロトタイプベースの継承にどのような影響を与えますか?
プロトタイプベースの継承: 「新しい」キーワードの役割の詳細
WeatherWidget という名前の新しい関数を使用して Widget クラスを拡張する場合、プロトタイプの割り当て:
WeatherWidget.prototype = new Widget;
は重要な役割を果たします。 「new」キーワードは Widget コンストラクターを呼び出し、その戻り値を WeatherWidget のプロトタイプ プロパティに割り当てます。
省略した場合、このアクションによりエラーが発生するか、グローバル名前空間が汚染される可能性があります。 「new」を使用すると、Widget コンストラクターが呼び出され、適切な初期化と有効な戻り値が保証されます。
ただし、このアプローチでは、すべての WeatherWidget インスタンスが同じ Widget インスタンスからプロパティを継承し、相互に値を共有するシナリオが作成されます。 。これは継承の原則と一致しない可能性があります。
この問題を修正し、真のクラスベースの継承を実装するには、次の手順を実行する必要があります。
function Dummy () {} Dummy.prototype = Widget.prototype;
WeatherWidget.prototype = new Dummy();
WeatherWidget.prototype.constructor = WeatherWidget;
このアプローチにより、WeatherWidget インスタンスは、インスタンス間で値を共有することなく、プロトタイプ チェーンを通じてプロパティを確実に継承します。
ECMAScript Ed のより簡潔なソリューションについては、 5 以降では、
WeatherWidget.prototype = Object.create(Widget.prototype, { constructor: {value: WeatherWidget} });
の使用を検討してください。あるいは、一般化された継承の実装については、Function.prototype.extend() を調べてください。このメソッドにより、プロトタイプの拡張が容易になり、親メソッドを呼び出すための便利な「スーパー」アクセス関数が提供されます。
以上が「new」キーワードは JavaScript のプロトタイプベースの継承にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。