プロトタイプとプロトタイプチェーン プロトタイプとプロトタイプの詳細

プロトタイプとプロトタイプチェーン プロトタイプとプロトタイプの詳細

1. プロトタイプ

プロトタイプはfunctionオブジェクトの下のプロパティです。コンストラクタの共通の祖先、つまり親子関係を定義します。子オブジェクトは親オブジェクトのメソッドとプロパティを継承します。

  • prototypeは関数のプロパティです。オブジェクトがプロトタイプを参照したい場合は、暗黙のプロパティ__Proto__
    を使用します。 __Proto__
  • constructorコンストラクタを指します
  • あなたには属性があり、プロトタイプにも属性があります。最も近いものを選んで、独自のものを使用してください

プロトタイプにプロパティを追加することで、インスタンス化されたすべてのオブジェクトはプロパティとメソッドを共有できます。

車プロトタイプ = {
 高さ: 1400,
 言語: 4900,
 車名: 'BMW'
}
関数Car() {
}
var car = 新しい Car();

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

各インスタンス オブジェクトには__proto__属性があり、属性__proto__を通じてコン​​ストラクターのプロトタイプ オブジェクトを指します。最後に到達すると null を返し、レイヤーごとに最上部まで検索してプロトタイプ チェーンを形成します。

prototypeは関数に固有であり、 __proto__オブジェクトに固有であり、 js内のすべてはオブジェクトです。

prototype——proto——違いと機能

  • prototype 、後続のオブジェクトが使用する共通のプロパティを事前に定義します。
  • prototypeの存在により継承が実現され、メモリスペースが節約される
  • __proto__はオブジェクト用で、 prototypeは関数用です。関数もオブジェクトなので、関数にも__proto__があります。
  • __proto__の機能は、オブジェクトのプロパティにアクセスするときに、そのプロパティがオブジェクト内に存在しない場合は、プロトタイプ チェーンである**__proto__**プロパティが指すオブジェクト (親オブジェクト) 内で検索されるというものです。
  • prototypeの役割は、関数によってインスタンス化されたオブジェクトが共通のプロパティとメソッドを見つけられるようにすることです。

__proto__ オブジェクト プロトタイプの重要性は、オブジェクトの検索メカニズムに方向、つまりルートを提供することですが、これは非標準の属性であるため、実際の開発では使用できません。内部的にプロトタイプ オブジェクト プロトタイプを指すだけです。

2.1 コンストラクタ

constructorプロパティは__proto__prototypeに存在し、コンストラクター関数自体を指します。

通常、オブジェクトのメソッドはコンストラクターのプロトタイプ オブジェクトに設定されます。オブジェクト メソッドが複数ある場合は、オブジェクト形式でプロトタイプ オブジェクトに値を割り当てることができますが、これによりコンストラクター プロトタイプ オブジェクトの元の内容が上書きされるため、変更されたプロトタイプ オブジェクト コンストラクターは現在のコンストラクターをポイントしなくなります。この時点で、変更されたプロトタイプ オブジェクトにコンストラクターを追加して、元のコンストラクターを指すことができます。

質問:関数のプロトタイプ オブジェクトを変更した後、コンストラクターは誰を指しますか?

 関数 Star(uname, age) {
     uname は uname です。
     this.age = 年齢;
 }
 // 多くの場合、コンストラクタープロパティを手動で使用して元のコンストラクターを参照する必要があります Star.prototype = {
 // 元のプロトタイプオブジェクトを変更し、そのプロトタイプオブジェクトにオブジェクトを割り当てる場合は、手動でコンストラクターを使用して元のコンストラクターを参照する必要があります。constructor: Star, // 手動で元のコンストラクターを参照するように設定 sing: function() {
     console.log('私は歌えます');
   },
   映画: 関数() {
     console.log('私は映画に出演できます');
   }
}
var zxy = new Star('ジャッキー・チュン', 19);
コンソールログ(zxy)

関数プロトタイプを変更する場合、 Star.prototypeはオブジェクトであるため、 constructorこのオブジェクトを構築するプロトタイプ、つまりobjectを指します。

2.2 電話/申し込み

call``apply thisの方向を変更し、他の人の機能を使用して独自の機能を完成させることができます。

違い: call複数のパラメータを渡し、 applyパラメータ配列を渡します

関数 Person(名前,年齢,性別) {
    this.name = 名前;
    this.age = 年齢;
    this.sex = セックス;
}
関数 Student(名前、年齢、性別、電話番号、学年) {
    //var this = {name: "lin", age: "19", sex: "male", tel: 123, grade: 78}
    Person.call(this,name,age,sex);//call を通じてこの関数を指すように変更します//Person.apply(this,[name,age,sex])
    this.tel = tel;
    this.grade = グレード;
}
var 学生 = 新しい学生 ('lin','19','男性',123,78);

2.3 新機能()

  • 空のオブジェクトを作成する
  • thisコンストラクタ関数は関数プロトタイプを継承します
  • thisコンストラクタのオブジェクトインスタンスにポイントし、コンストラクタを実行して新しいオブジェクトにプロパティとメソッドを追加します。
  • this返す
var obj = {} //空のオブジェクトを作成 obj.__proto__ = Person.prototype; //継承されたスコープ Person.call(obj,) //このポインタを変更 //これらの3つのステップは暗黙的です var person = new Person(); //新しい操作

プロトタイプとプロトタイプチェーンの違いの詳細に関するこの記事はこれで終わりです。プロトタイプとプロトタイプチェーンの違いに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き閲覧してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 【JSマスターロード】JavaScriptプロトタイプオブジェクトのグラフィカルな説明、プロトタイプチェーンの例
  • JavaScriptのプロトタイプとプロトタイプチェーンを一緒に学びましょう
  • JavaScript でのプロトタイプチェーンプロトタイプの紹介
  • JavaScript 継承メカニズムに基づくプロトタイプ チェーンの詳細な説明
  • JavaScript 学習ノート (IX) JavaScript におけるプロトタイプとプロトタイプチェーン継承
  • javascript プロトタイプ プロトタイプ チェーン

<<:  Dockerのネットワークモードと設定方法

>>:  MySQLは、統計クエリを最適化するために、sum、case、whenを巧みに使用します。

推薦する

Mybatis mysqlの削除操作では、最初のデータメソッドのみを削除できます。

バグ図のように、削除文とパラメータをデータベースにコピーして実行し、2つのデータを削除しようとしたの...

MySQLのストレージエンジンの詳細な説明

MySQL ストレージ エンジンの概要ストレージ エンジンとは何ですか? MySQL のデータは、さ...

React の 10 個のフックの紹介

目次ReactHook とは何ですか? Reactは現在フックを提供している1. 使用状態2.use...

枠線や境界線のない iframe を使用するための完全ガイド (実践経験のまとめ)

<iframe src=”ページのURL” width=”100″ height=”30″ f...

MySQLとOracleの違いを簡単に説明してください

1. Oracle は大規模データベースですが、MySQL は小規模から中規模のデータベースです。O...

ウェブページ作成のヒントのまとめ

序文この記事は主に、日常の Web ページ制作で遭遇する問題解決スキルの一部をまとめ、皆さんの参考と...

vscodeでnpmを使用してbabelをインストールする方法

序文前回の記事ではNode.jsのインストールと設定を紹介しました。今回はVScodeでbableを...

Mybatis での動的 SQL ステートメント分析

この記事は主にMybatisでの動的SQL文の解析について紹介します。この記事のサンプルコードは非常...

Dockerコンテナの中国語言語パックの設定の問題を解決する

Dockerでdocker search centosを使用する場合docker pull dock...

サーバー上で selenium+chromedriver を実行するための詳細なチュートリアル

1. はじめにSelenium を使用して Web サイトからデータをスクレイピングしたいのですが、...

VMware Workstation のインストール (Linux カーネル) Kylin グラフィック チュートリアル

この記事では、VMware WorkstationにKylinをインストールする方法を参考までに紹介...

JQuery データグリッドクエリの詳細な説明

目次ツリー項目にコードを追加します。 1. 右側に関連情報ページを保存します(userManage....

ウェブデザインにおけるポップアップウィンドウとフローティングレイヤーのデザイン

従来のソフトウェアから Web ウェアへの段階的な移行の傾向の中で、デザイン パターンとテクノロジは...

Dockerコンテナでユーザーを切り替えるときに権限が不足する問題を解決する方法

Docker コンテナでユーザーを切り替えると、権限が不十分であるというメッセージが表示されます。解...

Nginx の負荷分散アルゴリズムとフェイルオーバー分析

概要Nginx ロード バランシングは、アップストリーム サーバー (実際のビジネス ロジックによっ...