JavaScript プロトタイプ プロパティとは何ですか?オブジェクトをインスタンス化する 3 つのステップ

伊谢尔伦
リリース: 2017-07-20 15:42:45
オリジナル
1516 人が閲覧しました

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出原型所有成员个数。
ログイン後にコピー

ただし、プロトタイプ プロパティまたはプロトタイプ メソッドが定義されると、コンストラクターを通じてインスタンス化されたすべてのオブジェクトは、これらのプロトタイプ プロパティおよびプロトタイプ メソッドを継承します。これは、内部 _proto_ チェーンを通じて実現されます。

A.prototype.say=function(){alert("Hi")};
ログイン後にコピー

A のすべてのオブジェクトには Say メソッドがあります。すべてのオブジェクトが Say メソッドのコピーを持つのではなく、このプロトタイプ オブジェクトの Say メソッドが全員に共有される唯一のコピーです。

以上がJavaScript プロトタイプ プロパティとは何ですか?オブジェクトをインスタンス化する 3 つのステップの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!