序文:
正確に言うと、これらのプロパティとメソッドは、オブジェクト インスタンス自体ではなく、 プロトタイプとプロトタイプ チェーンは、次の 4 つの文で明らかになります。
コンストラクター、プロトタイプ、インスタンスの関係: 各 1. プロトタイプ(明示的なプロトタイプ)すべての関数には // コンストラクタ(クラス) 関数 Person(名前){ this.name = 名前 } // 新しいインスタンス(オブジェクト) var person = new Person('南玖') console.log(person) //Person { name: '南玖' } console.log(Person.prototype) //コンストラクタ関数のプロトタイプ(クラス)----->object Person.prototype.age = 18 //コンストラクタ関数のプロトタイプ console.log(person.age) // 18 上記では、オブジェクトを指すこの関数 上の図はコンストラクターとインスタンス プロトタイプの関係を示しており、コンストラクターのプロトタイプ プロパティがオブジェクトを指していることがわかります。 インスタンスとそのプロトタイプの関係は何ですか?ここで 2. __proto__ (暗黙のプロトタイプ)上記の4つの文から、これはすべての 次に、インスタンスとインスタンスプロトタイプの関係を証明します。 console.log(person.__proto__) //インスタンス (オブジェクト) プロトタイプ ---> オブジェクト console.log(person.__proto__ === Person.prototype) //インスタンスのプロトタイプはコンストラクター関数のプロトタイプと同じです 上の図から、インスタンス オブジェクトとコンストラクターの両方がプロトタイプを指すことができることがわかりますが、プロトタイプはコンストラクターまたはインスタンスを指すことができるのでしょうか? 3. コンストラクターコンストラクターは複数のインスタンス オブジェクトを作成できるため、プロトタイプにはインスタンスを指す属性はありません。 前の4つの文から、「ブラウザによってプロトタイプ用にデフォルトで割り当てられたヒープメモリには したがって、次の点を証明できます。 console.log(Person.prototype.constructor) // インスタンスの明示的なプロトタイプのコンストラクタ ƒ Person(name){this.name = name} console.log(person.__proto__.constructor) //インスタンスの暗黙的なプロトタイプコンストラクター ƒ Person(name){this.name = name} console.log(person.__proto__.constructor === Person.prototype.constructor) //true インスタンスプロトタイプのコンストラクタは、クラスのコンストラクタと同じです。console.log(Person === Person.prototype.constructor) //true インスタンス オブジェクトの 関数 Foo() {} // この関数は Function のインスタンス オブジェクトです // 関数はシンタックス シュガーです // 実際には内部で new Function() を呼び出します したがって、 4. 新しい原則簡単に言えば、次の 4 つのステップに分けられます。
関数myNew() { // 1. 新しい空のオブジェクトを作成する let obj = {} // 2. コンストラクタを取得する let con = arguments.__proto__.constructor // 3. リンクプロトタイプ obj.__proto__ = con.prototype // 4. これをバインドしてコンストラクタを実行します。let res = con.apply(obj, arguments) // 5. 新しいオブジェクトを返す return typeof res === 'object' ? res : obj } 5. プロトタイプチェーンプロトタイプについて話した後、プロトタイプ チェーンとは何かを見てみましょう。まずは写真を見てみましょう: この図では、 5.1 プロトタイプチェーンの役割プロトタイプ チェーンは、
5.2 コンストラクタの __proto__ とは何ですか?上記のプロトタイプチェーンの説明から、コンストラクター関数の 関数 Person(){} コンソールログ(Person.__proto__) console.log(関数プロトタイプ) console.log(Person.__proto__===Function.prototype) // true 「これは、すべての関数が Function のインスタンスであることも示しています」 このように理解すると、 Function.__proto__ === Function.prototype // true まさにこれが印刷される内容です。
6. まとめ
以下もご興味があるかもしれません:
|
>>: クラウドデータ移行サービスの観点から見たMySQLの大規模テーブル抽出モードの原理分析
目次1. グループクエリの概略図2. groupbyキーワード構文の詳細な説明3. 簡単なグループク...
目次1. 現在のデータベース内のテーブルを表示する2. テーブルを作成する3. 指定されたテーブル構...
注意: 計画、設計、開発のいずれの場合でも、これらの間違いは避けなければなりません。 1. ナビゲー...
Nestjs 例外フィルターといえば、非常に強力な .Net のグローバル フィルターについて触れな...
目次序文仮想リストとは何ですか?デモ効果準備スクリーンの高さとボックスの高さ最適化要約する序文人気の...
CSSファイルに書き込むコードをコピーコードは次のとおりです。 01.html {グレイスケール(1...
1. はじめに:友人はシステム知識を学びたいと考えており、Apple のラップトップを使用していまし...
背景クラスメートと row_id の境界問題について話し合ったので、ここで詳しく説明します。 Inn...
CentOS 8 が利用可能になりました! CentOS 8 と RedHat Enterprise...
Antd+react+webpackは、多くの場合、Reactテクノロジースタックに基づくフロントエ...
1. SSHリモート管理SSH の定義SSH (Secure Shell) は、主にキャラクタ イン...
SQL ページング クエリ:背景会社のシステムには、構成管理用のプラットフォーム、いわゆる CRUD...
目次1. サーバーAのmy.cnfファイルを変更する2. サーバーBのmy.cnfファイルを変更する...
1. 外部CSSファイルの基本スタイルをインポートする<link> タグを使用して外部ス...
今日は IE8 ベータ 1 (以下、IE8 と略します) をチラ見しました。IE8 は素晴らしい体験...