概要
javascriptでクラスを定義する際にも、他の言語と同様にコンストラクタを定義する書き方があります。
コンストラクタはクラスをインスタンス化するタイミングで実行される(初期化のタイミングで実行される)関数と考えることができます。
コンストラクタはnewキーワードを使ってインスタンスを生成するタイミングで自動的に呼び出されます。
javascript特有の動きとしては、コンストラクタの呼び出し時にprototypeプロパティが新しいオブジェクトのプロトタイプとして使われます。
次にコンストラクタを使ったコードを書いてみます。
//クラスとなるメソッドを定義 function Testclass() { //生成したオブジェクトに対して、プロパティを定義 this.test1 = 2; this.test2 = 60; } //上記のクラスに新たにメソッドを定義(付与)する Testclass.prototype = { //1つめのメソッドを追加 addfunc1: function(a) { //引数aに元のクラスのプロパティtest1の値を加算して返す return a + this.test1; }, //2つめのメソッドを追加 addfunc2: function(b) { //引数aに元のクラスのプロパティtest2の値を加算して返す return b + this.test2; } }; //Testclassメソッドをもとにインスタンス「ti」を生成する let tic = new Testclass(); //インスタンス console.log(tic.addfunc1(2)); console.log(tic.addfunc2(3));
上記の出力結果は
4 63
という値になります。
前回に投稿したブログ記事と構造は似ていますが、クラス「Testclass」の定義の方法と
呼び出し方(インスタンスの生成方法)が異なっています。
newキーワードを使ってTestclassを呼び出しているので、下記のように呼び出すタイミングで
let tic = new Testclass();
コンストラクタの実行としてfunction Testclass() 内の命令が実行され、this.test1 と this.test2 にそれぞれ値が入っているのことが把握できます。
また、クラス名(コンストラクタ)の先頭は大文字にしています。
小文字でも動作は同様になるのですが、一般的な慣習としてクラスの先頭は大文字にして書くと良いかと思います。
次に「Testclass.prototype」の定義の仕方ですが、これはコンストラクタ呼び出しの際に、オブジェクトのプロトタイプとして自動的に.prototypeが使われる為、このような書き方になります。