1. ホーム
  2. ジャバスクリプト

[解決済み】Javascriptがプロトタイプベースの言語であるというのはどういう意味ですか?

2022-04-04 18:31:08

質問

Javascriptの大きな利点の1つは、プロトタイプベースの言語であることだと言われています。

しかし、Javascriptがプロトタイプベースであるというのはどういうことなのでしょうか?

どのように解決するのか?

プロトタイプの継承 は、オブジェクト指向の一種である コード再利用 . Javascriptは、プロトタイプ継承を使用する唯一の[主流]オブジェクト指向言語の1つです。 他のほとんどすべてのオブジェクト指向言語は、古典的なものです。

古典的継承 プログラマはオブジェクトを定義するクラスを作成します。 複数のオブジェクトを同じクラスからインスタンス化することができるので、プログラム中の複数のオブジェクトを記述するコードを一カ所にまとめておくことができます。 また、クラスは階層化することができ、コードの再利用を促進することができる。 より一般的なコードは上位のクラスに格納され、下位のクラスはそこから継承されます。 つまり、オブジェクトは同じクラスの他のオブジェクトやその親クラスとコードを共有することになります。

では プロトタイプ継承 フォームでは、オブジェクト 直接継承する を他のオブジェクトから取得します。 クラスに関するビジネスはすべてなくなりました。 オブジェクトが欲しいなら、オブジェクトを書けばいいのです。 しかし、コードの再利用は依然として重要なことなので、オブジェクトは階層的にリンクされることが許されています。 javascriptでは、すべてのオブジェクトは、それを作成したオブジェクトへの秘密のリンクを持っており、チェーンを形成しています。あるオブジェクトが持っていないプロパティを要求されると、その親オブジェクトが要求され...プロパティが見つかるか、ルートオブジェクトに到達するまで、連鎖的に上がっていきます。

JavaScriptの各関数(それ自体がオブジェクトです)は、実は"prototype"というメンバーを持っていて、オブジェクトが値を要求されたときにその値を提供する役割を担っているのです。このメンバがあることで、コンストラクタの仕組み(関数からオブジェクトを構築する仕組み)が機能するようになります。関数オブジェクトのプロトタイプにプロパティを追加すると、構築されたオブジェクトと、それを継承するすべてのオブジェクトがそのプロパティを利用できるようになります。

メリット

プロトタイプ継承がなぜコード再利用に有利なのか、明確なルールはないのかもしれません。 コードの再利用はそれ自体が有利であり、プロトタイプ継承はそれを行うための賢明な方法です。 プロトタイピング継承は、かなり シンプルなモデル でコードを大量に再利用することができます。 <強い 直接法 . しかし、古典的な言語もこれを実現できるのは確かです。

参考までに。 アンドリュー・ヘッジズ がある、というのは良い指摘です。 多数 プロトタイピング言語です。 これらの他の言語が存在することは注目に値しますが、どれも主流とは言い難いこともまた注目に値します。 NewtonScriptは一時期人気があったようですが、そのプラットフォームとともに消滅してしまいました。また、プロトタイピングの機能を追加する方法で、いくつかのモダンな言語を拡張することも可能です。