ホームページ  >  記事  >  ウェブフロントエンド  >  js プロトタイプ チェーンは何で構成されていますか?相続においてそれはどのような役割を果たしますか?

js プロトタイプ チェーンは何で構成されていますか?相続においてそれはどのような役割を果たしますか?

php是最好的语言
php是最好的语言オリジナル
2018-07-28 09:38:184578ブラウズ

次の図と簡単な例を組み合わせると、コンストラクター、プロトタイプ オブジェクト、インスタンス オブジェクトの関係をまず理解できます。まず、この簡単な説明図を見てみましょう。

js プロトタイプ チェーンは何で構成されていますか?相続においてそれはどのような役割を果たしますか?

この図は、コンストラクタープロトタイプオブジェクト、およびインスタンスオブジェクトの間の関係を説明しています: そして、プロトタイプチェーンは基本的にこれら 3 つの間の関係に基づいています

上の図から、それぞれが各コンストラクターにはプロトタイプ オブジェクト (プロトタイプ) があり、プロトタイプ オブジェクトにはコンストラクター自体を指すポインターがあります。ただし、プロトタイプ属性は関数内にのみ存在し、プロトタイプ属性はオブジェクト内には存在しません。 _proto_ 属性はすべてのオブジェクトに存在します

以下は、それらの間の関係を示す例です

最初に A のコンストラクターを定義し、次にインスタンス オブジェクト a を新規に定義しますjs プロトタイプ チェーンは何で構成されていますか?相続においてそれはどのような役割を果たしますか?

1.A.prototype は

prototype オブジェクトを表します

2 つの属性コンストラクターと _proto_

2.A.prototype.constructor===プロトタイプ オブジェクト

属性コンストラクター属性はコンストラクター自体に対応します

3.A.prototype== =a.__proto__ 上の図からわかるように、インスタンス オブジェクトの _proto_ 属性はプロトタイプ オブジェクトを指します

4.a.__proto__===A.prototype インスタンス オブジェクト a の _proto_ 属性はプロトタイプ オブジェクトを指しますオブジェクト

5.a インスタンス オブジェクト a は共通の属性 _proto_

上の図とこの簡単な例を組み合わせると、3 つの関係を理解できます

これらの関係を中心に JS プロトタイプ チェーンがどのように展開されるかについて話しましょう。まずは写真を見てください

この写真は最初の写真とあまり変わりませんが、プロトタイプのチェーンチェーンを探すプロセスを表していますjs プロトタイプ チェーンは何で構成されていますか?相続においてそれはどのような役割を果たしますか?

次に、例を使用して説明します。この写真を組み合わせてください。 Case で考えると理解しやすいです

インスタンスオブジェクト a とプロトタイプオブジェクトの両方に name 属性を追加しました。 a.name を出力すると、結果は 111 になります。 js プロトタイプ チェーンは何で構成されていますか?相続においてそれはどのような役割を果たしますか?

しかし、インスタンスオブジェクト a の name 属性を削除して a.name を読み取ると、結果は 222 になります。

これは、検索で a オブジェクトに name 属性が見つからない場合、A に name 属性が見つかるため、a のプロトタイプ (a.__proto__

) から検索するためです。プロトタイプの場合、結果は 222 です。

ここで、A.prototype に name 属性が見つからない場合、A.prototype もオブジェクトであり、_proto_ 属性があるため、

したがって、A.prototype プロトタイプのプロトタイプは A.prototype._proto_

したがって、

A.prototype.__proto__===Object.prototype は true です

A.prototype のプロトタイプは Object.prototype であるため、上の例から Object.prototype._proto_ のプロトタイプは null であることがわかります

注: null は特別な値ですが、その型はオブジェクトですが属性がないため、プロトタイプは存在しません。null が見つかると、プロトタイプ チェーンは終了します

したがって、プロトタイプ チェーンは - -A.prototype--Object.prototype--null は上の青いプロセス行です 上記の操作と説明でプロトタイプチェーンのプロセスと操作を理解できますが、適用する際にはまだやるべきことがたくさんあります。それをコード設計に反映します

継承は OO 言語の 1 つです。多くの OO 言語は、

インターフェース継承

実装継承 という 2 つの継承メソッドをサポートしています。一方、実装の継承は実際のシグネチャを継承します。 js のメソッドには署名がないため、ECMAScript の実装インターフェースでは使用できません。ECMAScript は実装の継承のみをサポートしており、その は主に 实现继承 に依存することで実現されます。 JavaScript の継承とプロトタイプ チェーン

JS の継承 -- プロトタイプ チェーンの継承とクラスの継承

関連動画:

JS 開発検証フォーム チュートリアル

以上がjs プロトタイプ チェーンは何で構成されていますか?相続においてそれはどのような役割を果たしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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