MILK2017/8/4更新JavaScriptのプロトタイプ:prototypeプロパティ124タイトルとURLをコピーJavaScriptはプロトタイプベースのオブジェクト指向言語です。ここでは、プロトタイプの概要について説明します。JavaScriptのプロトタイプとはプロトタイプベースのオブジェクト指向では、新しいオブジェクトは元となるオブジェクトを雛形(=プロトタイプ)として作成されます。関数はprototypeプロパティを持っているそして、全ての関数オブジェクトは、prototypeプロパティを持っています。(以下単にprototypeと記述します)に代入されたオブジェクトは、その関数を元にしたインスタンスから「暗黙の参照」がされます。参照:JavaScriptのコンストラクタによるインスタンス生成prototypeの暗黙の参照についてサンプルを交えながら説明します。John"と表示この時、johnというインスタンスが、greetプロパティを持っているように見えますが、実はコンストラクタのprototypeに追加されたgreetプロパティメソッドを「暗黙の参照」をしているだけで、johnというインスタンス自体はgreetプロパティを持ちません。prototypeプロパティを使うのかメソッドの共通化・継承ひとつはメソッドをインスタンス間で共通化できるからです。インスタンスは、コンストラクタのprototypeのプロパティを参照するので、内容を変更する時もより簡単になります。function(){console.log("Hello")};nick.greet();//nickでもHelloと表示されるまた、JavaScriptにおける継承のプロトタイプチェーンに使う時にもprototypeが使われます。参照:JavaScriptの継承:プロトタイプチェーンメモリの節約また、インスタンスを作成すると、コンストラクタ内で定義されたプロパティは生成する全てのインスタンスにコピーされます。全てのインスタンスで共有する必要がない場合、そのプロパティをコンストラクタで定義するとメモリの無駄遣いとなってしまいます。そこで、prototypeを使うことで、そのオブジェクトから生成したインスタンスからそのプロパティを参照できメモリの節約となります。prototypeを使うサンプル次の例ではコンストラクタを使ってPersonオブジェクトのインスタンスを生成しています。//LaLaLasingerとwriterというインスタンスが作成されていますが、writerにはsingプロパティは必要なく無駄なプロパティを持つことになってしまいます。次の例は、上記のプログラムを改良し、singプロパティをPersonオブジェクトのprototypeとして登録しています。//LaLaLasinger.sing()では、まずsingerインスタンス内にsingプロパティが登録されているかを調べます。仮にsingというプロパティが存在した場合はPersonオブジェクトのprototypeは参照しません。変更されることもありません。Person.prototype.singを参照する必要がなくなります。writer.singは(インスタンス内にsingプロパティが登録されていないため)Person.prototype.singを参照したままです。MILKはより良いサービスやプロダクトを作りたい人のためのメディアです。