ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript 混合コンストラクターとプロトタイプ メソッド、動的プロトタイプ メソッド_js オブジェクト指向

JavaScript 混合コンストラクターとプロトタイプ メソッド、動的プロトタイプ メソッド_js オブジェクト指向

WBOY
WBOYオリジナル
2016-05-16 18:40:04870ブラウズ

次の 2 つのメソッドは、日常の JS プログラミングで最も一般的に使用されます。
1. コンストラクターとプロトタイプのメソッドの混合 (強調)

code コードは次のとおりです:

function car (sColor,iNumbers){ // コンストラクターは、オブジェクトのすべての非関数プロパティを定義するためにのみ使用されますつまり、オブジェクト
this.color = sColor;
this.numbers = iNumbers;
this.dirvers = new Array ("Jone","Leon");
car.prototype.showColor = function (){ // プロトタイプ メソッドは、オブジェクトのすべての関数属性、つまりオブジェクトのメソッド
alert(this.color) を定義するためにのみ使用されます。
var car1 = 新しい車("red");
var car2 = 新しい車(" yellow")();
car2.showColor); >

概要: (new) を作成するとき 新しいオブジェクト インスタンス car1 と car2 が作成されると、この時点では car1 と car2 の両方が関数オブジェクト car のすべての非関数属性 (showColor メソッド) を継承します。 car関数オブジェクトのprototype内でcar関数の外に生成されると、car1とcar2はcar関数本体にprototypeメソッドを入れると、car1とcar2がそのプロトタイプ内のshowColorメソッドを参照します。この時点では参照関係にありません。代わりに、関数が実行されるたびに showColor 関数が構築されます。cars が 100 台ある場合は、100 個の関数を繰り返し構築する必要があります。したがって、非機能属性と機能属性を分けて記述する必要があります。

2. 動的プロトタイプメソッド (要点)



コードをコピー
コードは次のとおりです。 function car (sColor,iNumbers){ // コンストラクターは、オブジェクトのすべての非関数プロパティ、つまりオブジェクトのプロパティを定義するためにのみ使用されます this.color = sColor;
this.numbers = iNumbers;
this.dirvers = new Array ("Jone","Leon");
if(typeof car._initialized=="unknown"){ //ここで car._initialized が確立され、実行を継続します。次の関数
car.prototype.showColor = function (){
alert(this.color);
}
}
car. _initialized = true; //
は、現時点では car._initialized は関数の属性であり、関数オブジェクトのプロトタイプ属性ではないため、ここで停止し、2 回目は実行しないように実行されます。プロトタイプ属性を使用すると、関数オブジェクトのインスタンスが新しく作成され、関数内部が変更されます。プロトタイプ オブジェクトの属性を使用すると、showColor 関数が繰り返し構築されます。このため、car._initialized が unknown の場合は、showColor を 1 回実行して、最終的に car._initialized=true を取得します。このとき、関数のプロトタイプのプロパティではなく、関数のプロパティが変更されるため、外部の新しいプロパティが変更されます。オブジェクト インスタンスは関数のプロパティを変更する方法がまったくありません。赤い部分のすべてのコードは 1 つのことを実行します。赤いコードの間のメソッドのみを実行し、各メソッドは 1 回だけ実行され、実行されません。繰り返し処刑される!
}
var car1 = 新車 ("赤");
var car2 = 新車 ("黄");
car1.showColor();


まとめ: 上記 2 つの方法のどちらを使用しても、同じ効果が得られます。
方法 1: コンストラクターとプロトタイプを混合する方法は、関数以外の属性と一般的な属性を別々に記述することと同じなので、新しいオブジェクトが作成されるときに新しい関数が繰り返し構築されず、知識関数のプロトタイプが作成されます。この時点で参照されるオブジェクトのメソッドおよび関数オブジェクトのプロパティ。ただし、コードはカプセル化されていないようで、何も影響しません。
方法 2: JAVA プログラミングのコーディング スタイルを完全に利用して JS プログラミングを実装します。この利点は、関数全体が属性とメソッドが関数本体に「カプセル化」されているように見え、より「クラス」のように見えることです。 (過去を振り返り、新しいことを学ぶ: 実際には JS にはクラスがありません。クラスがあるという場合は、それを関数クラスと考えることができます。) 欠点は、if() ステートメントの使用があまり見栄えがしないことです。フレンドリー。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。