Javascript もオブジェクト指向言語ですが、クラスベースの言語ではなく、プロトタイプベースの言語です。
「JavaScript でのオブジェクトの作成」の記事で述べたように、コンストラクターを使用してオブジェクトを作成する場合には問題があります。つまり、同じコンストラクターの異なるインスタンスの同じメソッドがそのため、プロトタイプを使用してコンストラクター内のパブリック プロパティとメソッドを抽出し、それらをカプセル化して、すべてのインスタンスで共有できるようにします。
関数で定義されたオブジェクトにはプロトタイプ属性があり、プロトタイプ属性はプロトタイプ オブジェクトを指します。プロトタイプ オブジェクトにはコンストラクター属性があり、このコンストラクター属性もコンストラクター オブジェクトを指しており、このコンストラクター オブジェクトはまさに関数そのものです。
疑似コードは次のように表現されます。
var function{ prototype:prototype{ constructor:constructor == function } }
関数とプロトタイプの関係
#関数の作成js will 関数のプロトタイプ オブジェクトを指すプロトタイプ属性が自動的に作成され、プロトタイプ オブジェクトは関数を指すコンストラクター属性を自動的に取得します。
例: 例として、前のプロトタイプ モードを使用してオブジェクトを作成します。
<script type="text/javascript"> function Person(){ } Person.prototype.name="lxy"; Person.prototype.age=22; Person.prototype.job="Software Engineer"; Person.prototype.sayName=function(){ alert(this.name); } var lxy=new Person(); lxy.sayName(); var personA=new Person(); personA.sayName(); alert(lxy.sayName()==personA.sayName());//true </script>
インスタンスとプロトタイプの関係
Createコンストラクターを介したインスタンス。インスタンスには、コンストラクターのプロトタイプ オブジェクトを指すプロパティ (ポインター) が内部に含まれます。
例: PERSON コンストラクター インスタンス PERSON1 と PERSON2 の [[Prototype]] 属性は両方とも PERSON のプロトタイプを指します。
注: [[Prototype]] 接続は、インスタンスとコンストラクターの間ではなく、インスタンスとコンストラクターのプロトタイプの間に存在します。
このポインタに関しては、ECMA-262 では [[プロトタイプ]] と呼ばれています。 [[プロトタイプ]] にアクセスする標準的な方法はありませんが、Firefox、Safari、および Chrome は各オブジェクトの属性 __protp__ をサポートしています。他の実装では、このプロパティはスクリプトには表示されません。
以上がjsのプロトタイプとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。