今回は、思いつきで、「無名クラス」的なものが出来るかどうか実験します。 つまり、コンストラクタを無名関数的に定義して、それを括弧で括って引数を渡したものに newステートメントを使っています(この辺は曖昧)。 「無名コンストラクタ」といった方がいいかもしれません。 詳しくは、コードが全てを物語っています。 |
function Main1(){ var a=new (function(name){ this.Name=name; this.Speak=function(){ alert('私の名前は'+this.Name+'です'); } })('sakata'); a.Speak(); alert(a.constructor); } |
これは驚きました。出来るんですね。 念と興味本位のためにconstructorを参照してみましたが、面白いですね。 ちなみに、newが無いとエラーになります。 この結果から、newは、 「new コンストラクタ」によってオブジェクトを返すもの といった解釈ができそうですね。 |
おまけ |
function Main2(){ var a=function(x){return x+3}(2); var b=new function(x){this.v=x}(2); var c=new function(x){return x+3}; var d=new function(x){return x+3}(2); alert('a='+a+'\na.con='+a.constructor); alert('b='+b+'\nb.v='+b.v+'\nb.con='+b.constructor); alert('c='+c+'\nc.con='+c.constructor); alert('d='+d+'\nd.con='+d.constructor); } |
上の4行と結果だけを見てください。 a,bについてはfunctionを括る括弧は不要ということで。 c,dのもつ値については議論の余地がありそうです。 |
top 戻る |