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

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

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を巧みに使用します。

推薦する

RocketMQ の Docker インストールとインストール中に発生した問題の解決策

目次rocketmqイメージを取得する名前rvを作成する単一のブローカーノードを作成するrocket...

Vueのsync修飾子の詳細な説明

目次1. 手順2. 修飾語3. .sync 修飾子4. まとめ1. 手順指示とは命令です。文字通りの...

mysql データベースの作成、ユーザーの追加、ユーザー認証の実用的な方法

1. MySQLデータベースを作成する1. データベース構文を作成する --「testdb」という名...

mysql のインデックスと FROM_UNIXTIME に関する問題

ゼロ、背景今週の木曜日にたくさんのアラートを受け取りました。DBA に確認を依頼したところ、遅いクエ...

Vueで配列の変更を監視する方法

目次序文ソースコード学習の第一歩はどこから始めればよいでしょうか?写真から始めましょうソースコードを...

MySQL で乱数を生成し、文字列を連結する方法の例

この記事では、MySQL が乱数を生成し、文字列を連結する方法について例を使用して説明します。ご参考...

英語: リンクタグはIEでhrefを自動的に補完します

英語: IE では、リンク タグによって href が自動的に補完されます。 Ajax Link T...

Dockerカスタムネットワークコンテナ相互接続

目次序文-リンクカスタムネットワーク質問する序文前回は、 -Linkパラメータを使用してコンテナ間の...

Windows2008 64 ビット システムでの MySQL 5.7 グリーン バージョンのインストール チュートリアル

序文この記事では、MySQL 5.7 グリーン バージョンのインストール チュートリアルを紹介します...

Dockerでランナーコンテナを構成する方法

1. ランナーコンテナを作成する mk@mk-pc:~/Desktop$ docker run -d...

HTML テーブル マークアップ チュートリアル (16): タイトルの水平方向の配置属性 ALIGN

デフォルトでは、表のタイトルは水平方向に中央揃えされます。ALIGN 属性を使用して、タイトル テキ...

MySQL ログの設定と表示方法

MySQL には次のログがあります。エラーログ: -log-errクエリログ: -logスロークエリ...

VMWare14.0.0のUbuntu仮想マシンで共有フォルダを設定する

これは私の最初のブログ投稿です。時間の制約があるため、どのようにフォーマットすればよいかわかりません...

CSS コード省略 div+css レイアウト コード省略仕様

略語を使用すると、CSS ファイルのサイズが小さくなり、読みやすくなります。 CSS 省略形の主なル...

MySQL Bツリーインデックスとインデックス最適化の概要についての簡単な説明

MySQL の MyISAM エンジンと InnoDB エンジンはどちらもデフォルトで B+ ツリー...