javascriptのすべての変数とUオブジェクトは、newの特定の関数によって直接的または間接的に作成されたと見なすことができます。
コンストラクター:新しい関数は、オブジェクトのコンストラクターと呼ばれます。
プロトタイプオブジェクト:コンストラクターには、オブジェクトのプロトタイプオブジェクトと呼ばれるプロトタイププロパティがあります。newを介して出力されるすべてのインスタンス(オブジェクト)は、プロトタイプオブジェクトのメソッドとプロパティを共有します。
例えば:
var arr = new Array(); // Array()是构造函数, arr是实例(对象)
Array.prototype.a = 1; // Array.prototype是原型对象
console.log(arr.a); // 结果是:1, arr共享原型对象上的方法和属性
オブジェクトがメソッドを呼び出すと、最初にメソッド自体が検索されます。そうでない場合は、プロトタイプチェーンに移動してプロトタイプが検索されます。オブジェクトが見つからない場合は、引き続きプロトタイプのプロトタイプが検索されます。ステップバイステップ。
プロトタイプチェーン:プロトタイプオブジェクト間にチェーンが形成されます。たとえば、上記の例では、配列でメソッドを使用する場合、最初にArray.prototypeに移動して存在するかどうかを確認し、次にプロトタイプオブジェクトのプロトタイプオブジェクトObject.prototypeに移動して検索します。見つからない場合は、オブジェクトプロトタイプnullのプロトタイプに移動します。上に移動して検索します。これにより、プロトタイプチェーンが形成されます。
例えば:
var arr = new Array();
Object.prototype.b = 2;
Array.prototype.a = 1;
console.log(arr.b); // 2
// 输出arr.b是先去Array.prototype找有没有属性b,再去Object.prototype找
プロトタイプオブジェクトとは、プロトタイプが指すオブジェクトを指します。たとえば、配列のプロトタイプオブジェクトは、Array.prototypeが指すオブジェクトです。
プロトタイプオブジェクトには、関数自体を指すデフォルトのコンストラクター属性があります。たとえば、array.constructorの結果は、そのコンストラクターArray()です。
プロトタイプオブジェクトとプロトタイプチェーンは、主に継承を実装するために使用されます。
例として、コンストラクターとプロトタイプオブジェクトの構造図は次のとおりです。