JS のすべての関数には、オブジェクト、つまりプロトタイプ オブジェクト (プロトタイプとも呼ばれます) を参照するプロトタイプ属性があります。この関数にはコンストラクターと通常の関数が含まれます。コンストラクターのプロトタイプについて詳しく説明しますが、通常の関数にもプロトタイプがあることは否定できません。たとえば、通常の関数:
function F(){ alert(F.prototype instanceof Object) //true; }
Constructor、つまりオブジェクトの構築。まず、コンストラクターを通じてオブジェクトをインスタンス化するプロセスを理解しましょう。
function A(x){ this.x=x; } var obj=new A(1);
obj オブジェクトをインスタンス化するには 3 つの手順があります:
1. obj オブジェクトを作成します: obj=new Object(); 2. obj の内部 __proto__ を構築する関数 A を指します。同時に、 obj .constructor===A.prototype.constructor (A.prototype が元の A プロトタイプ、つまりインスタンス オブジェクトのコンストラクター属性を指さなくなった場合でも、これは常に true です)。クラスの は常に "constructor" の Prototype.constructor を指します)、したがって、 obj.constructor.prototype は A.prototype を指します (obj.constructor.prototype===A.prototype、これは A.prototype の場合には当てはまりません)以下で説明するように変更されます)。 obj.constructor.prototype と内部 _proto_ は、オブジェクトをインスタンス化するときに使用されます。obj にはプロトタイプ属性がありませんが、プロトタイプ チェーンのプロトタイプ属性を取得するために __proto__ を使用できます。 . そして、プロトタイプ メソッドである FireFox は、FireFox でアラート (obj.__proto__) を生成できる __proto__ を公開します。 これら 3 つの手順が完了すると、obj オブジェクトはコンストラクター A との接続がなくなります。この時点で、コンストラクター A がメンバーを追加しても、インスタンス化された obj オブジェクトには影響しなくなります。このとき、obj オブジェクトは x 属性とコンストラクター A のプロトタイプ オブジェクトのすべてのメンバーを持ちます。もちろん、この時点ではプロトタイプ オブジェクトにはメンバーがありません。
var num=0; for(o in A.prototype) { alert(o);//alert出原型属性名字 num++; } alert("member: " + num);//alert出原型所有成员个数。
A.prototype.say=function(){alert("Hi")};
以上がJavaScript プロトタイプ プロパティとは何ですか?オブジェクトをインスタンス化する 3 つのステップの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。