JavaScriptのインスタンス生成
最近各所でJavaScriptを使う機会が増えてきているので、ココらで改めてJSについて学んでみようかと。
調べてみると オブジェクト指向プログラミング には プロトタイプ と インスタンス 周りの理解が必要っぽい。ふむふむ…
スマホで見る
細かい解説なんかは一番下の参考サイトにたくさんあるので、兎にも角にもまずはどういう風に記述するもんなのか!?というのを書きます。
JavaScriptのインスタンス生成の記述方法の例
なるべく用語を整理しながら各所にコメントで書いておきました。
自分の中でいつも引っかかるのは各用語の使い分けなので。
改めて「関数・コンストラクタ・メソッド」の使い分けを知りました。
- 関数 … functionを使って宣言する通常のFunctionオブジェクト。
- コンストラクタ … オブジェクト・インスタンス生成に使われる関数のこと。定義の仕方は通常の関数と変わらないがローカルのプロパティ等をコンストラクタ用に書く必要があるのでそこで使い分けが出来るかと。※コンストラクタ名の頭文字は大文字にするのがセオリーらしい
- メソッド … コンストラクタ内で定義されている関数。
どれも「Functionオブジェクト」という意味では同じだけど、状況に合わせて上記のように使い分けがされているみたいです。
上の例に合わせて通常の関数を用いた例も以下に。
通常の関数の例
別にいつも使うこういう関数の使い方が悪いというわけではないんだろうけど、処理内容によってメモリに無駄に負荷をかけてしまったりするから場面に合わせて使い分けることが必要なんだろうねきっと。
プロトタイプを活用するメリット
第4回 JavaScriptでオブジェクト指向プログラミング にあった記述からの抜粋なんですが、コレが一番わかりやすいメリットなのかなと。
- 必要なメモリ量を節約できる
- プロトタイプ・オブジェクトの変更はリアルタイムに認識
まとめ
- コンストラクタにする関数名の頭文字は大文字にする
- オブジェクトを大量に生成する必要がある処理はインスタンスとprototypeを上手く使ってメモリ領域を節約する
- スコープチェインとクロージャを活用する
スコープチェインとクロージャに関してはココでは取り上げてないけど、今回やったインスタンス云々には必ず登場するので必須知識かと思い含めときました。
というかこのテーマに関してちゃんとまとめ上げるのは今の自分には厳しいので今回はこんなもんで。
軽く「JSでclassみたいなのやろうとしたらどうするんだろう?」ってところから調べ始めたら数日を費やしてしまった… 咀嚼に時間がかかるわ…
そういやインスタンスを使ってメモリ節約とか Flash みたいですよね。 たぶんこの辺の考え方ってどの言語や環境でも通じるものだと思うので今後も慣れていきたいですね。
というわけで今回はこの辺で!
参考サイト
なんか参考サイトがいっぱいになってしまったけど、どれも読むと「なるほどなー」となるので理解を深めるには良い記事だと思います!マジお世話になりました!!
- やっと理解できた!JSオブジェクト指向プログラミング再入門
- 知ってて当然?初級者のためのJavaScriptで使う即時関数(function(){…})()の全て
- 最強オブジェクト指向言語 JavaScript 再入門!
- 第4回 JavaScriptでオブジェクト指向プログラミング
- JavaScript オブジェクト指向 プロトタイプなどのまとめ
- this と prototype の違い (Javascript)
- や…やっと理解できた!JavaScriptのプロトタイプチェーン
- JavaScriptの「プロトタイプ入門」
- Javascriptでオブジェクト指向(クラス,オーバーライド,カプセル化)