オブジェクト モデル
赤い点線は暗黙的なプロトタイプ チェーンを示します。
このオブジェクト モデル図には多くのものが含まれており、多くの箇所を注意深く理解する必要があるため、検証用のテスト コードを作成できます。この図を完全に理解すると、JavaScript 言語の理解もほぼ同じになります。以下に追加の手順を示します。
1. 図内には、組み込み関数コンストラクターが記載されている場所がいくつかあります。これは同じオブジェクトであり、テストおよび検証できます。
//FF2.0、IE7、Opera9.25、Safari3.0.4 で渡されます
Function==Function.constructor / /result: true
Function==Function.prototype.constructor //result: true
Function==Object.constructor //result: true
//関数もNumber.constructor、String.constructor、Array.constructor、RegExp.constructor などに相当します。
function fn(){}
Function==fn.constructor //result: true
これはいくつかの問題を示しています: Function はシステムの組み込み関数コンストラクター (組み込み Function コンストラクター) を指します。Function はブートストラップされます。システム内のすべての関数は Function から構築されます。
2. 左下隅の obj1、obj2...objn スコープは、次のようなコードで作成されたオブジェクトを参照します。ローカル コンストラクター メソッドがありますが、プロトタイプ チェーンから継承されたコンストラクター メソッド、つまり fn.prototype.constructor を取得します。関数オブジェクトの構築プロセスから、それが fn 自体であることがわかります。
3. 右下隅の obj1、obj2...objn の範囲は、次のようなコードで作成されたオブジェクトを指します。 var obj1=new Object(); またはvar obj1 =新しい数値(123);またはobj1=/w /;など。したがって、これらのオブジェクトのプロトタイプ チェーンのポイント、プロトタイプ チェーンから継承されたコンストラクターの値 (コンストラクターが組み込みの Number コンストラクターであるか、組み込みの Object コンストラクターであるかなどを参照) は、特定のオブジェクトによって異なります。オブジェクトタイプ。また、var obj=new Object(123); この方法で作成されたオブジェクトのタイプは依然として Number であり、これもパラメータ値のタイプに基づいて決定する必要があることに注意してください。同様に、ローカル コンストラクターはありませんが、プロトタイプ チェーンから継承されたコンストラクター メソッド、つまり組み込み *** コンストラクターを取得します。特定のコンストラクターはデータ型によって決まります。
サンプルコード
/ /JavaScript オブジェクト モデルで定義された関数の使用に対応するカスタマイズされたオブジェクトの代表
function Foo(){}
//カスタム オブジェクトによって作成されたオブジェクト インスタンスの代表。JavaScript オブジェクト モデルのユーザー定義関数によって作成されたオブジェクトに対応
var foo = new Foo();
//String 組み込み関数の代表
//str は、JavaScript 内のオブジェクトに対応する、組み込み関数によって作成されたオブジェクト インスタンスの代表です組み込みコンストラクターによって作成されたオブジェクト モデル
var str = new String("string");
メモリ表示
「JavaScript_09_関数とオブジェクトを理解する」に似ています。 メモリ分析グラフは同じですが、なぜですか? 「データ モデル」で説明したように、組み込みオブジェクトは、関数の派生型と見なすことができます。たとえば、NumberinstanceofFunction は true、NumberinstanceofObject は true です。この意味では、これらはユーザー定義関数と同じように扱うことができます。したがって、組み込みオブジェクトとカスタム オブジェクトの作成プロセスは同じです。
このブログ記事は「関数とオブジェクト」の理解に基づいて書かれているため、この記事を理解するには関数とオブジェクトの関係を理解する必要があります。
最後に一言書いておきます: とんでもない理論です!