ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript プロトタイプ継承における `new` の役割: `Derived.prototype = new Base` は何ですか?
次のコード スニペットを考えてみましょう。
ここでWidget はコンストラクターを表し、私たちの目標は WeatherWidget と呼ばれる新しい関数でそれを拡張することです。このコンテキストにおける new キーワードの重要性は何ですか?また、省略した場合にどのような影響が生じるでしょうか?
新しいキーワードは重要な操作を実行します。 Widget をコンストラクターとしてインスタンス化し、その戻り値を WeatherWidget のプロトタイプ プロパティに代入します。 new キーワードが存在しない場合、引数を指定せずに (括弧を省略するなどして) Widget を呼び出すと、未定義の動作が発生します。さらに、ウィジェットの実装がコンストラクターとして呼び出されるように設計されていない場合、このアプローチは誤ってグローバル名前空間を汚染する可能性があります。
示されているように new キーワードを使用すると、 WeatherWidget は同じ Widget インスタンスから継承し、次のプロトタイプになります。 chain:
この特定の配置は、すべての WeatherWidget インスタンスが Widget インスタンスから継承されたプロパティ値を共有することを目的としている場合に適しています。ただし、ほとんどのシナリオでは、このような共有継承は望ましくありません。
プロトタイプを使用する JavaScript でクラスベースの継承を効果的に実装するには、次のアプローチをお勧めします。
この手法により、WeatherWidget インスタンスがプロトタイプ チェーンを通じてプロパティを適切に継承しますが、インスタンス間でプロパティ値を共有することはありません。中間のダミー コンストラクターからプロトタイプを継承するためです。結果のプロトタイプ チェーンは次のとおりです。
ECMAScript 5 以降に準拠した最新の JavaScript 実装では、次のアプローチが推奨されます。
このアプローチには、列挙不可、構成不可のコンストラクターを作成するという追加の利点があります。 property.
最後に、親コンストラクター (この場合は Widget) は子コンストラクター (WeatherWidget) 内からのみ明示的に呼び出されることに注意することが重要です。 apply メソッドまたは call メソッドの使用方法:
以上がJavaScript プロトタイプ継承における `new` の役割: `Derived.prototype = new Base` は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。