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

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

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

推薦する

Maxwell を使用して MySQL データをリアルタイムで同期する方法

目次マクスウェルについてMaxwellの設定と使用1. Maxwellインストールパッケージをダウン...

CSS ボックスモデル内のパディングと略語の詳細な説明

上図のように、パディング値は時計回り(右上、右下)の複合属性であり、パディングの内側の余白がボックス...

JavaScript は単一のリンクリストプロセス分析を実装します

序文:複数の要素を格納するために、配列は最も一般的に使用されるデータ構造ですが、配列には多くの欠点も...

ubuntu15.10 での hadoop2.7.2 の詳細なインストールと設定

Linux での Hadoop インストール チュートリアルはインターネットや書籍に多数ありますが、...

HTML でスクロールバーを使用する際のヒントを共有する

今日、牛南ニュースリリースシステムについて学んでいたとき、牛南先生はスクロールバーに関するいくつかの...

React構成サブルーティングの実装

1. コンポーネント First.js にはサブコンポーネントがあります。 './Admin...

複数のdiv内のテーブルのtdwidth設定は同じで、揃えることができません

最近、複数のdivにあるテーブルのTDを同じ幅に調整しても、揃えることができず、幅にパターンがないこ...

CentOS7 で MySQL データベースにリモート接続できない理由と解決策

序文最近、仕事で問題が発生しました。 Centos7 システムでは MySQL にリモート接続できな...

太陽系の惑星のアニメーション効果を実現するHTML+CSS3コード

太陽系の 8 つの惑星(衛星を除く)のアニメーションを作成します。すべての惑星は太陽の周りを回ってい...

Youdaの新しいプチビューの実装

目次序文導入ライブ使いやすいルートスコープマウント要素の指定ライフサイクルコンポーネントグローバル状...

vue シンプルメモ帳開発の詳しい説明

この記事では、参考までにEasy Notepadを実装するためのVueの具体的なコードを紹介します。...

nginxディレクトリパスをリダイレクトする方法

ドメイン名に続くパスがデフォルトの Web ディレクトリではなく、ローカル ディスク上の他のディレク...

MySQL 上級学習インデックスの長所と短所、使用ルール

1. インデックスの利点と欠点利点: 高速検索、高速グループ化および並べ替えデメリット: ストレージ...

jsでシンプルなパズルゲームを実現する

この記事では、簡単なパズルゲームを実装するためのjsの具体的なコードを参考までに共有します。具体的な...

Win10でのMySQL5.7.17無料インストール版の基本設定チュートリアルについて(画像とテキスト付き)

データベース アプリケーションは、アプリケーション システムに不可欠な部分です。リレーショナル デー...