ホームページ ウェブフロントエンド jsチュートリアル JavaScript の継承とプロトタイプ チェーンについての深い理解

JavaScript の継承とプロトタイプ チェーンについての深い理解

Sep 14, 2018 pm 05:07 PM

この記事では、JavaScript の継承とプロトタイプ チェーンについて詳しく説明します。 テキストとコードが包括的に分析されており、必要な方は参考にしていただければ幸いです。あなた。

JavaScript のほとんどすべてはオブジェクトです。各オブジェクトには、他のオブジェクトにリンクされた内部プロパティがあり、これをプロトタイプと呼びます。プロトタイプ オブジェクト自体にも独自のプロトタイプ オブジェクトがあり、この時点でプロトタイプ チェーンが生成されます。プロトタイプ チェーンをたどると、最終的にはプロトタイプが null のカーネル オブジェクト、つまりプロトタイプ チェーンの終わりに到達します。

プロトタイプチェーンの役割は何ですか?オブジェクトが所有していないプロパティにアクセスすると、JavaScript はプロパティまたはプロトタイプ チェーンの終わりが見つかるまでプロトタイプ チェーンを検索します。この動作により、「クラス」を作成し、継承を実装できることが保証されます。


まだ理解できていなくても大丈夫ですので、実際に理解していきましょう。次に、JavaScript の最も単純な例を見てみましょう。メソッド オブジェクト

function Animal() {}
var animal = new Animal();
ログイン後にコピー

で作成された「クラス」です。この Animal クラスにプロパティを追加するには、インスタンスのプロパティを設定するか、Animal プロトタイプを追加する 2 つの方法があります。 。

function Animal(name) {
    // Instance properties can be set on each instance of the class
    this.name = name;
}
// Prototype properties are shared across all instances of the class. However, they can still be overwritten on a per-instance basis with the `this` keyword.
Animal.prototype.speak = function() {
    console.log("My name is " + this.name);
};
var animal = new Animal('Monty');
animal.speak(); // My name is Monty
ログイン後にコピー

Animal オブジェクトの構造は、コンソールを見ると明らかになります。 name 属性はオブジェクト自体に属し、speak は Animal プロトタイプに属していることがわかります。

ここで、Animal クラスを拡張して Cat クラスを作成する方法を見てください:

function Cat(name) {
    Animal.call(this, name);
}
Cat.prototype = new Animal();
var cat = new Cat('Monty');
cat.speak(); // My name is Monty
ログイン後にコピー

私たちが行ったことは、Cat のプロトタイプを Animal インスタンスに設定することです。 Animal のすべてのプロパティを継承します。同様に、Animal.call を使用して Animal のコンストラクターを継承します。 call は、関数を呼び出して関数内で this の値を指定できるようにする特別な関数です。そのため、 this.name が Animal のコンストラクターにある場合、Animal の名前ではなく Cat の名前が設定されます。

Cat オブジェクトを見てみましょう:

JavaScript の継承とプロトタイプ チェーンについての深い理解

予想どおり、Cat オブジェクトには独自の name インスタンス属性があります。オブジェクトのプロトタイプを見ると、speak プロトタイプ プロパティと同様に、Animal の name インスタンス プロパティも継承していることがわかります。これは、プロトタイプ チェーンがどのように見えるかです。cat.name にアクセスすると、JavaScript は name インスタンス プロパティを検索しますが、プロトタイプ チェーンの下位は検索しません。いずれにせよ、cat.speak にアクセスすると、JavaScript は Animal から継承された speech プロパティを見つけるまで、プロトタイプ チェーンをさらに検索する必要があります。

以上がJavaScript の継承とプロトタイプ チェーンについての深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

スコープチェーンとプロトタイプチェーンとは何ですか? スコープチェーンとプロトタイプチェーンとは何ですか? Nov 13, 2023 pm 01:46 PM

スコープチェーンとプロトタイプチェーンとは何ですか?

プロトタイプとプロトタイプチェーンとは何ですか プロトタイプとプロトタイプチェーンとは何ですか Nov 09, 2023 pm 05:59 PM

プロトタイプとプロトタイプチェーンとは何ですか

プロトタイプとプロトタイプチェーンの違いは何ですか プロトタイプとプロトタイプチェーンの違いは何ですか Nov 09, 2023 pm 04:48 PM

プロトタイプとプロトタイプチェーンの違いは何ですか

JSプロトタイプとプロトタイプチェーンの役割は何ですか JSプロトタイプとプロトタイプチェーンの役割は何ですか Nov 09, 2023 pm 04:56 PM

JSプロトタイプとプロトタイプチェーンの役割は何ですか

jsプロトタイプとプロトタイプチェーンとは何ですか jsプロトタイプとプロトタイプチェーンとは何ですか Jun 14, 2023 am 11:34 AM

jsプロトタイプとプロトタイプチェーンとは何ですか

プロトタイプチェーンとは プロトタイプチェーンとは Feb 19, 2024 pm 03:27 PM

プロトタイプチェーンとは

プロトタイプとプロトタイプチェーンの特徴は何ですか? プロトタイプとプロトタイプチェーンの特徴は何ですか? Nov 09, 2023 pm 04:38 PM

プロトタイプとプロトタイプチェーンの特徴は何ですか?

プロトタイプとプロトタイプ チェーンの特殊性を探る プロトタイプとプロトタイプ チェーンの特殊性を探る Jan 13, 2024 pm 03:50 PM

プロトタイプとプロトタイプ チェーンの特殊性を探る

See all articles