JavaScriptにおけるコンストラクタ関数を学ぶ
JavaScriptにおけるコンストラクタ関数が、イマイチよく分からなかったので、学習してみた。
まず コンストラクタ関数とは、オブジェクトのインスタンスを生成する関数である。いわゆる「new 演算子」を使うことを前提とした関数だ。そして、コンストラクタ関数を、「new 演算子」を用いずに只の関数として使用した場合、下記の2点が異なってくるらしい。
1.「this」の参照先
2.プロトタイプ継承の有無
というわけで、実際にコードを書いて試してみることにした。
function Person(name, age) { this.name = name; this.age = age; } Person.prototype.move = function (id) { return "tokotoko..."; }; var tom = new Person("tom", 24); console.log(tom.name); // tom console.log(tom.age); // 24 console.log(tom.move); // tokotoko... var julia = Person("julia", 21); console.log(julia.name); // undefined console.log(julia.age); // undefined console.log(julia.move()); // undefined
なるほど、どうやら下記の違いがあるらしい。
・コンストラクタ関数
「this」の参照先:コンストラクタ関数で生成されたオブジェクト
プロトタイプ継承:有効
・只の関数
「this」の参照先:関数を内包する親オブジェクト (ここではグローバルオブジェクト)
プロトタイプ継承:無効
なお、コンストラクタ関数を定義した場合、その関数名の最初を大文字にするのが望ましい。別に大文字でなくても関数の振る舞いは変わらないが、コンストラクタ関数であることを明示的に示すことができるためである。
今回参考にした書籍はこちら。
まだ読んでいる途中だが、JavaScriptにおけるオブジェクトを理解するには、大変役立ちそう。また、一度は皆はまると思われる「this」についても言及されているので、多くの人が読んでおいて損はないと思う。
開眼! JavaScript ―言語仕様から学ぶJavaScriptの本質
- 作者: Cody Lindley,和田祐一郎
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/06/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
※なお、JavaScriptではnew 演算子を使わずにインスタンスを生成する方法もあるらしい