人生は、お天気いろいろ

日々の生活やプログラミング等に関するメモ・雑文を記載しています

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の本質

開眼! JavaScript ―言語仕様から学ぶJavaScriptの本質

 

 

※なお、JavaScriptではnew 演算子を使わずにインスタンスを生成する方法もあるらしい