JavaScriptではnew演算子がありますが、クラスというのは存在しません。
newするとコンストラクタからインスタンスを生成します。
1 2 3 4 5 |
function Car(speed,color){ this.speed = speed; this.color = color; } var car = new Car(40,'black');// インスタンス生成 |
thisがいきなり出てきましたが、thisという空のオブジェクトが定義されてreturnされているという感じです。
1 2 3 4 5 6 7 |
function Car(speed,color){ // this = {}; this.speed = speed; this.color = color; // return this; } var car = new Car(40,'black');// インスタンス生成 |
new演算子を使用するとconstructorプロパティが生成され、newしたコンストラクタを参照しています。
以下、constructorをalertしたソースです。
1 2 3 4 5 6 7 8 9 10 |
<script type="text/javascript"> function Car(speed,color){ // this = {}; this.speed = speed; this.color = color; // return this; } var car = new Car(40,'black'); alert(car.constructor); </script> |
次にprototypeプロパティについてです。
関数宣言するとprototypeプロパティが生成されます。
1 2 3 4 5 6 7 8 9 |
function Car(){} // これでもprototypeプロパティが生成される Car.prototype.speed = 40; Car.prototype.warn = function() { alert("warn"); } var car = new Car(); alert(car.speed); car.warn(); |
carは何も定義していないCarをnewしたにもかかわらず、car.speedやcar.warn()が使えます。
prototypeは関数の親メソッド・プロパティのようなイメージです。
個別にメソッドやプロパティを定義したい場合は関数宣言に定義し、関数共通のメソッドやプロパティはprototypeで定義するべきです。
また、prototypeが親なので、関数宣言時に同じ名前のプロパティなどを宣言するとオーバーライドされます。
1 2 3 4 5 6 |
function Car(speed,color){ this.speed = speed; } Car.prototype.speed = 20; var car = new Car(40,'blue'); alert(car.speed); |
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^