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

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

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

推薦する

SQL Server の完全バックアップに関する珍しいエラーと解決策

1. エラーの詳細一度、データベース全体のバックアップを手動で実行したときに、次のエラーが発生しまし...

CSS ハック \9 と \0 は IE11\IE9\IE8 のハッキングには機能しない可能性があります

Web ページやフォームを設計するたびに、さまざまなブラウザ、特に IE ファミリの互換性の問題に悩...

リンク内の href=# はどういう意味ですか?

現在のページへのリンク。 -------------------一般的な使用法は次のとおりです。 &...

CSS 疑似クラス: 空っぽだと光る (サンプルコード)

最近私の記事を読んだ人なら誰でも、私が現在WeChatミニプログラムプロジェクトを担当しており、その...

Centos 6.5 での mysql-community-server. 5.7.18-1.el6 のインストール

次のコマンドを使用して、MySQL Serverがインストールされているかどうかを確認します。 [r...

Linux システムのスワップ領域の紹介

スワップ スペースは、オペレーティング システムに関係なく、今日のコンピューティングの一般的な側面で...

Gogs+Jenkins+Docker による .NetCore ステップの自動デプロイ

目次環境説明DockerのインストールゴグのインストールDocker で .NetCore サービス...

HTML で相対パスを使用してディレクトリのすべてのレベルのファイルを取得する方法の詳細な説明

相対パスの概念現在のファイルの場所を参照ポイントとして使用して、ターゲット ファイルへのパスを確立し...

ウェブデザインにおける円形要素の使用例 25 選

本日の投稿では、Web デザインで使用される円形要素の優れた例をいくつか挙げ、美しい丸いボタン、メニ...

JavaScript で最も高速なループはどれですか?

どの for ループまたは反復子がニーズに適しているかを知ることで、アプリケーションのパフォーマンス...

詳細なアイデアを備えたシンプルな計算機の HTML 実装

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...

Node.jsはブレークポイント再開を実装する

目次ソリューション分析スライス履歴書のダウンロード具体的な解決プロセス論理的分析フロントエンドサーバ...

MySQL で最大接続数を設定するためのヒントのまとめ

方法1: コマンドラインの変更次の図に示すように、MySQL コンソールを開いて「set GLOBA...

Win10システムにMySQL 8.0をインストールするときに発生する問題を解決する

Win10 システムに MySQL 8.0 をインストールする際に発生する問題と解決策は次のとおりで...

適応分析と応答分析の違いを専門用語で詳しく説明

日々の開発経験と関連するオンライン情報に基づいて、アダプティブとレスポンシブの違いをシンプルでわかり...