ホームページ >ウェブフロントエンド >jsチュートリアル >「new」キーワードは JavaScript のプロトタイプベースの継承にどのような影響を与えますか?

「new」キーワードは JavaScript のプロトタイプベースの継承にどのような影響を与えますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-14 15:34:22884ブラウズ

How Does the `new` Keyword Impact Prototype-Based Inheritance in JavaScript?

プロトタイプベースの継承: 「新しい」キーワードの役割の詳細

WeatherWidget という名前の新しい関数を使用して Widget クラスを拡張する場合、プロトタイプの割り当て:

WeatherWidget.prototype = new Widget;

は重要な役割を果たします。 「new」キーワードは Widget コンストラクターを呼び出し、その戻り値を WeatherWidget のプロトタイプ プロパティに割り当てます。

省略した場合、このアクションによりエラーが発生するか、グローバル名前空間が汚染される可能性があります。 「new」を使用すると、Widget コンストラクターが呼び出され、適切な初期化と有効な戻り値が保証されます。

ただし、このアプローチでは、すべての WeatherWidget インスタンスが同じ Widget インスタンスからプロパティを継承し、相互に値を共有するシナリオが作成されます。 。これは継承の原則と一致しない可能性があります。

この問題を修正し、真のクラスベースの継承を実装するには、次の手順を実行する必要があります。

  1. ダミーを作成するオブジェクト:
function Dummy () {}
Dummy.prototype = Widget.prototype;
  1. プロトタイプの割り当て:
WeatherWidget.prototype = new Dummy();
  1. 修正コンストラクター:
WeatherWidget.prototype.constructor = WeatherWidget;

このアプローチにより、WeatherWidget インスタンスは、インスタンス間で値を共有することなく、プロトタイプ チェーンを通じてプロパティを確実に継承します。

ECMAScript Ed のより簡潔なソリューションについては、 5 以降では、

WeatherWidget.prototype = Object.create(Widget.prototype, {
  constructor: {value: WeatherWidget}
});

の使用を検討してください。あるいは、一般化された継承の実装については、Function.prototype.extend() を調べてください。このメソッドにより、プロトタイプの拡張が容易になり、親メソッドを呼び出すための便利な「スーパー」アクセス関数が提供されます。

以上が「new」キーワードは JavaScript のプロトタイプベースの継承にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。