2011/11/04(Fri)
11日目 - new演算子とコンストラクタ
・JavaScriptのコンストラクタ
new演算子を用いて呼び出された関数をコンストラクタと呼ぶ。
ある関数にnew演算子をつけて呼び出した時点ではじめてコンストラクタとして振舞うので、ソースコード上では通常の関数とコンストラクタの区別はない。
(Java や C++ のように、クラス定義時に特定の関数がコンストラクタと定まっているわけではない。)
new演算子をつけてコンストラクタとして呼び出すことが想定されている関数を、便宜上、コンストラクタ関数と呼ぶ。
なお、コンストラクタ関数の名前は大文字で始めるのが慣例。
コンストラクタとなった関数の名前は、(オブジェクト名).constructor.nameで確認できる。
(ただし、nameプロパティは非標準の機能である。標準の機能としては、toString()メソッドを用いる。)
nameやtoString()でコンストラクタ関数名を取得するには、コンストラクタ関数をネームド関数にする必要があるが、instanceof演算子による判別はコンストラクタが無名関数でも可能である。
function MyObject1() {}; var MyObject2 = function () {}; var bar = new MyObject1(); var baz = new MyObject2(); alert(bar.constructor.name); // "MyObject1" alert(baz.constructor.name); // "" コンストラクタが無名関数 alert(bar.constructor.toString()); // "function MyObject1(){}" alert(baz.constructor.toString()); // "function (){}" コンストラクタが無名関数 alert(bar instanceof MyObject1); // true alert(baz instanceof MyObject2); // true
・new演算子の働き
ある関数Fを、new演算子を用いてコンストラクタとして呼び出した場合、以下のような処理を行う。(引用)
参考文献
http://nanto.asablo.jp/blog/2005/10/24/118564
http://d.hatena.ne.jp/kaw0909/20100801/1280662055