JavaScript プロトタイプチェーンを理解するための 2 つの図

JavaScript プロトタイプチェーンを理解するための 2 つの図

序文:

前回の記事では、JavaScript プロトタイプを紹介しました。プロトタイプ チェーンも一緒に紹介してみませんか? JavaScript におけるプロトタイプチェーンは難しいポイントであり、面接でも必ず聞かれる質問なので、今のうちに学んでおきましょう。

1. プロトタイプの関係

JavaScriptのすべての関数にはプロトタイプを返す prototype プロパティがあり、プロトタイプにはそれに関連付けられたコンストラクター関数を指すconstructorプロパティがあります。コンストラクターによってインスタンス化されたオブジェクトには、コンストラクターのプロトタイプと同じメモリを__proto__ __proto__属性があります。

標準では__proto__属性が削除されており、代わりにObject.getPrototypeOf(object)和Object.setPrototypeOf(object, prototype)使用されていることに注意してください。

次に、Object コンストラクターとプロトタイプの関係をテストします。サンプル コードは次のとおりです。

// まず、Object はコンストラクタ関数なので、プロトタイププロパティを持ちます var result = Object.prototype
console.log(result) // プロトタイプオブジェクトを取得する/*
 * プロトタイプオブジェクトのコンストラクタプロパティ -> それに関連付けられたコンストラクタを返します * Object.getPrototypeOf(result) はコンストラクタを指すプロトタイプを返します
 */
var result2 = 結果.コンストラクタ
console.log(result2) // [関数: オブジェクト]
var result3 = Object.getPrototypeOf(結果)
console.log(結果3) // null

図を以下に示します。

Object.getPrototypeOf(Object.prototype)を通じてObject.prototypeのプロトタイプを取得すると、返される値は null になります。これは、 Object.prototypeが見つかったら検索を停止できることを意味します。

2. プロトタイプチェーン

プロトタイプチェーンが何であるかを理解しやすくなるように、まず次のコードを見てみましょう。

関数 Person(名前) {
  this.name = 名前
}

var PP = Person.プロトタイプ
var PPC = PP.コンストラクタ
// コンストラクタと同じであることを確認する console.log(PPC === Person) // true

// Person をインスタンス化する
var person = new Person('Yiwan Zhou')
// インスタンス化された Person オブジェクトのプロトタイプを取得します var pP = Object.getPrototypeOf(person)
// インスタンス化されたPersonオブジェクトのプロトタイプがコンストラクタのプロトタイプを指していることを確認します
console.log(pP === PP) // 真

実際、次のコードでテストされているように、すべてのコンストラクターはデフォルトで Object から継承されます。

// Person.prototype のプロトタイプを取得します。var PPP = Object.getPrototypeOf(PP)
var OP = オブジェクト.プロトタイプ
// 2つが等しいかどうかを確認します console.log(PPP === OP) // true


上記のコードはあまり明確ではないので、理解を助けるために図を描きました。

上の図の赤い線はプロトタイプ チェーンです。プロトタイプ チェーンは、最終結果が null (つまりObject.prototypeになるまで、プロトタイプ内の関係を指します。プロトタイプ チェーンは終了し、 **Object.prototype**プロトタイプ チェーンの終点であることを意味します。

Object.setPrototypeOf(obj, prototype)メソッドを使用して特定のコンテンツのプロトタイプ チェーンを設定できますが、パフォーマンスに大きな負荷がかかるため、必要がない場合は実行しないことをお勧めします。

3. 結論

2 つの図を使用して、JavaScript におけるプロトタイプの関係とプロトタイプ チェーンについて説明します。最後に、プロトタイプ チェーンの終点を紹介します。

これで、2 枚の画像で JavaScript のプロトタイプ チェーンを理解する方法についての記事は終了です。JavaScript プロトタイプ チェーンの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Javascript プロトタイプとプロトタイプチェーンをご存知ですか?
  • JavaScript のコンストラクター、プロトタイプ、プロトタイプ チェーン、new についてどれくらい知っていますか?
  • JavaScriptプロトタイプチェーン図のまとめと実践
  • JavaScript プロトタイプとプロトタイプチェーンの深い理解
  • Js の継承とプロトタイプチェーンを理解するのに役立つ記事
  • JavaScriptプロトタイプとプロトタイプチェーンの詳細な説明

<<:  一般的な DIV タスク (パート 2) — DIV のエディターとさまざまな DIY アプリケーションへの変換

>>:  幅の比率に応じて高さを変えるCSSを実装するいくつかの方法

推薦する

ウェブページをデザインするには?ウェブページを作成するには?

Web デザインの理解に関しては、多くの人がまだ Web ページ制作のレベルにとどまっているようで...

thead、tfoot、tbodyを使用して表を作成します

これらの 3 つのタグを間違った方法で使用して、タイトルを表に沿わせたり、tbody の高さを固定し...

Webデザインの経験: Webコードを効率的に書く

本来、この第 7 章では、デザインにおけるレイヤーと空間テクニックについて深く議論するはずです。しか...

データベースを削除して逃げる?xtraback を使用して MySQL データベースをバックアップする方法

1. mysqldump バックアップ方法では論理バックアップが使用されます。最大の欠点は、バック...

JavaScript は、シンプルな虫眼鏡の最も完全なコード分析を実装します (ES5)

この記事では、参考までに、シンプルな虫眼鏡を実装するためのJavaScriptの具体的なコードを紹介...

JavaScript シミュレーション計算機

この記事では、JavaScriptシミュレーション計算機の具体的なコードを参考までに紹介します。具体...

Tomcat 実行時の JVM エンコーディングの問題を修正

質問:最近、プロジェクトを展開すると文字化けしたデータが出てきました。確認したところ、プロジェクトは...

Vue + 要素を使用して背景データをオプションに動的に表示する

必要:ハードコードされたデータの代わりに、セレクター内のオプション値の動的な表示を実装します。私のロ...

一般的な HBase 運用および保守ツール 10 個の概要

概要: HBase には、ユーザーに管理、分析、修復、デバッグ機能を提供するための多くの操作および保...

CSS3 で高さと幅を不定にして垂直と水平に中央揃えするいくつかの方法

1. フレックスレイアウト 。父親 { ディスプレイ: フレックス; コンテンツの中央揃え: 中央;...

セマンティック XHTML タグの紹介

まず最初に指摘しておきたいのは、人間は視覚的な区分を通じてコン​​テンツの意味を判断できるが、検索エ...

MySQL 8.0.13 解凍版のインストールと設定方法のグラフィックチュートリアル

1. インストール1. MySQLをダウンロードするダウンロードアドレス: リンクアドレスブラウザで...

MySQL 5.6.23 のインストールと設定環境変数のチュートリアル

この記事では、MySQL 5.6.23のインストールと設定のチュートリアルを参考までに紹介します。具...

jQueryは従業員情報の追加と削除の機能を実装します

この記事では、従業員情報の追加と削除の機能を実装するためのjQueryの具体的なコードを参考までに共...

Mysql で group_concat の長さ制限を変更する方法

MySQL には、「group_concat」という関数があります。通常の使用では問題がないかもしれ...