JavaScriptプロトタイプチェーン図のまとめと実践

JavaScriptプロトタイプチェーン図のまとめと実践

プロトタイプチェーン

class キーワードは ES6 で導入されましたが、JS はまだプロトタイプベースであり、class は実際には構文上の糖衣です。

たとえば、people クラスがあります。

クラス People {
  コンストラクタ(props) {
    プロパティの名前を変更します。
  }
  走る() {
    コンソールログ('実行')
  }
}

新しい人民階級を通じて、張三や李斯など多くの人々が生み出されます。

let lisi = new People('李四')

しかし、広大な人間の海の中には、並外れた才能を持った人々のグループがいます。彼らはスーパーヒーローと呼ばれています。

クラスHeroはPeopleを拡張します{
   コンストラクタ(props) {
    スーパー(小道具);
    this.power = props.power
   }
   ヘイハ() {
       アラート(this.power)
   }
}

Hero クラスは People を継承しているので、ヒーローはまず run メソッドを持つ個体であり、次に Hero には普通の人にはない超能力 heyHa メソッドがあります。大砲の超能力を持つジンクスというヒーローを次のように定義できます。

Jinx = new Hero({ name: 'jinx', power: 'cannon!' }) とします。

インスタンス Jinx は run メソッドを定義していませんが、プロトタイプ チェーンを使用すると、People プロトタイプにこの run メソッドがあること、つまり、その暗黙的なプロトタイプ __proto__ がコンストラクターのプロトタイプを指していることを確認できます。

ここに画像の説明を挿入

インスタンスがメソッドまたはプロパティにアクセスする場合、インスタンス自体から開始し、プロトタイプ チェーンを遡って検索します。

Jinx.heyHa() // 大砲!
// このメソッドがある場合 Jinx.run = () => console.log('i just fly!')
Jinx.run() // ただ飛ぶだけ!

では、 People.prototype.__proto__どこを指しているのでしょうか? Object.prototype場合、コンソールにコードを入力すると、次のようになります。

ここに画像の説明を挿入

しかし、 Object.prototype__prototype__ null に等しく、宇宙の終わりは無です。 。

ここに画像の説明を挿入

これまでのところ、完全なプロトタイプ チェーン図は次のようになります。

ここに画像の説明を挿入

プロトタイプチェーンに基づいてシンプルなJQueryライブラリを実装することができます

クラス JQuery {
  コンストラクタ(セレクタ、ノードリスト) {
    const res = nodeList || document.querySelectorAll(セレクタ);
    定数長さ = res.length;
    (i = 0; i < 長さ; i++) の場合 {
      this[i] = res[i]
    }
    this.length = 長さ;
    this.selector = セレクター;
  }
  eq(インデックス) {
    新しいJQuery(undefined、[this[index]])を返します。
  }
  それぞれ(fn) {
    for(i = 0; i < this.length; i++) {
      const ele = this[i]
      fn(要素)
    }
    これを返します。
  }
  on(type, fn) {
    this.each(ele => { を返します。
      ele.addEventListener(タイプ、fn、false)
    })
  }
  // 他のDOM APIを拡張する
}
const $$ = (セレクター) => new JQuery(セレクター);
$$('body').eq(0).on('click', () => alert('click'));

コンソールで実行すると、結果は次のようになります。

ここに画像の説明を挿入

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

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

<<:  Web 開発の面接と筆記試験に必須の知識(必読)

>>:  n 個のコンテナ要素による無限スクロールの実装コード

推薦する

HTML の値属性と名前属性の機能と使用法の紹介

1. ボタンで使用される値は、「OK」、「削除」など、ボタンに表示されるテキストを指します。 2. ...

CentOS 7.5 に Python 3.6.6 を最初からインストールするための詳細なチュートリアル

ps: 環境はタイトル通りです依存関係をインストールする yum インストール openssl-de...

zabbix 4.04 の詳細なインストール チュートリアル (CentOS 7.6 ベース)

1. インストール前の準備: 1.1 JDKをインストールするopenjdkをアンインストールする...

MYSQL パフォーマンス アナライザー EXPLAIN 使用例分析

この記事では、例を使用して MYSQL パフォーマンス アナライザー EXPLAIN の使用方法を説...

MySQL は information_schema オブジェクトの付与をバイパスし、ERROR 1044 (4200) エラーを報告します

この質問は、MySQL の権限に関する WeChat グループのネットユーザー間の議論です。次のよう...

MySQL 5.7 インストール MySQL サービスを開始できませんが、サービスはエラーを報告しません

MySQL 5.7 をインストールするには 2 つの方法があります。1 つはインストーラをダウンロー...

MySQL ファントムリードとその排除方法の詳細な説明

目次トランザクション分離レベルファントムリーディングとは何ですか?ファントムリードを排除する方法要約...

JavaScriptはランダムコードの生成と検証を実現する

JavaScriptでのランダムコードの生成と検証は参考までに。具体的な内容は以下のとおりです。イベ...

伝説的な VUE 構文シュガーは何をするのでしょうか?

目次1. 糖衣構文とは何ですか? 2. VUE の構文糖とは何ですか? 1. 最も一般的な構文シュガ...

MySQL マスタースレーブレプリケーションプロセスの詳細な説明

1. マスタースレーブレプリケーションとは何ですか?マスター データベースの DDL および DML...

Ubuntu環境でPHPとNginxをコンパイルしてインストールする方法

この記事では、Ubuntu 環境で PHP と Nginx をコンパイルしてインストールする方法につ...

Linux 環境で crontab コマンドを使用して、スケジュールされた定期的な実行タスクを設定します (PHP 実行コードを含む)

この記事では、Linux 環境で crontab コマンドを使用して、タスクの定期的な実行をスケジュ...

1 つの記事で Vue ミドルウェア パイプラインを学ぶ

SPA を構築する場合、多くの場合、特定のルートを保護する必要があります。たとえば、認証されたユーザ...

Reactコンポーネントのライフサイクルの詳細な説明

目次1.ライフサイクルとは何か2. 読み込みプロセス1.コンストラクタ2. レンダリング3. コンポ...

yum 経由で CentOS に PHP をインストールするチュートリアル

まず、yumを使ってCentOSにPHPをインストールする方法を紹介します。 1. PHPのyumソ...