導入
プロトタイプとは、プロトタイプインスタンスで作成されたオブジェクトのタイプを指し、これらのプロトタイプをコピーして新しいオブジェクトを作成します。
文章
プロトタイプモードの場合、JavaScriptの一意のプロトタイプ継承機能を使用してオブジェクトを作成できます。つまり、1つのオブジェクトが別のオブジェクトのプロトタイプ属性値として作成されます。プロトタイプオブジェクト自体は、各コンストラクターによって作成されたオブジェクトを効果的に利用します。たとえば、コンストラクターのプロトタイプに名前属性が含まれている場合(以下の例を参照)、このコンストラクターを介して作成されたオブジェクトにはこの属性があります。
既存の文献のプロトタイプパターンの定義を見ると、JavaScriptはありません。説明の多くはクラスに関するものであることがわかりますが、現実には、プロトタイプの継承に基づいたJavaScriptがクラスの概念を完全に回避することです。既存のオブジェクトをコピーしてオブジェクトを作成するだけです。
実際のプロトタイプ継承は、ECMAScript5標準の最新バージョンとして提案されています。 Object.Createメソッドは、そのようなオブジェクトを作成するために使用されます。この方法は、指定されたオブジェクトを作成します。そのオブジェクトのプロトタイプには、指定されたオブジェクト(つまり、メソッドによって渡される最初のパラメーターオブジェクト)があり、他のオプションの指定属性も含めることができます。たとえば、object.create(プロトタイプ、optionaldescriptorobjects)は、次の例でもこの使用法を見ることができます。
コードコピーは次のとおりです。
//それはコンストラクターではないので、大文字にする必要はありません
var somecar = {
ドライブ:function(){}、
名前:「マツダ3」
};
// object.create xを使用して新しい車を作成します
var anothercar = object.create(somecar);
AnotherCar.name = 'Toyota Kami';
Object.createは、他のオブジェクトから直接継承する実行を実行します。このメソッドの2番目のパラメーターを使用して、追加のプロパティを初期化できます。例えば:
コードコピーは次のとおりです。
var車両= {
getModel:function(){
console.log( '車両の型は' + this.model);
}
};
var car = object.create(very、{
'id':{
値:my_global.nextid()、
列挙可能:true //デフォルトの書き込み:false、configurable:false
}、
'モデル': {
価値:「フォード」、
列挙可能:本当です
}
});
ここでは、オブジェクトリテラルを使用してObject.createの2番目のパラメーターを渡すことができます。リテラルを使用して、初期化される追加のプロパティを入力すると、その構文はobject.definepropertiesまたはobject.definepropertyメソッドタイプと同じです。これにより、列挙性、書き込み可能、または構成可能なものなどのプロパティのプロパティを設定できます。
Object.createを直接使用する代わりに、プロトタイプモードを自分で実装したい場合。次のようなコードを使用して、上記の例を実装できます。
コードコピーは次のとおりです。
var vehicleprototype = {
init:function(carmodel){
this.model = carmodel;
}、
getModel:function(){
console.log( '車両型IS:' + this.model);
}
};
function very(model){
関数f(){};
f.prototype = beilprototype;
var f = new f();
f.init(モデル);
fを返します。
}
var car = ver( 'Ford Escort');
car.getModel();
要約します
JavaScriptでのプロトタイプモードの使用は、単純に遍在しています。他の多くのモードもプロトタイプに基づいているため、あまり言いません。ここに注意を払う必要があるのは、引用の問題を避けるために、浅いコピーとディープコピーの問題です。