| 今回は、思いつきで、「無名クラス」的なものが出来るかどうか実験します。 つまり、コンストラクタを無名関数的に定義して、それを括弧で括って引数を渡したものに 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 戻る |