第55回
今回は、前回の内容を少し発展させて、
newに渡すコンストラクタを、いろいろいじってみます。
今までのとは一線を画してややこしいので注意してください。
コンストラクタがオブジェクトをreturnすると…
function Main1(){
	var a=new function(){return {value:0}};
	alert(a.value);
	alert(a.constructor);
}
普通のコンストラクタは以下のものと同じことなのでは?
(つまり最後にreturn thisをしているということです)
function Main2(){
	var a=new function(){this.value=0;return this};
	alert(a.value);
	alert(a.constructor);
}
コンストラクタがオブジェクトをnewを使って返す(これはMain1と同じ)もの、
コンストラクタがコンストラクタを返すもの
function Main3(){
	var a=function(){this.value=0};
	var b=new function(){return new a};
	alert(b.value);
	alert(b.constructor);
	var c=new function(){return a};
	alert(c);
	alert((new c).value);
}
あるコンストラクタfを返す関数gについて、
new gとg()の値は同じになるのではないでしょうか。
(ただし、fという同じ関数をgという同じ関数が参照したときのみ正しく評価できます。
その根拠については、参考を参考に熟考をお願いします)
function Main4(){
	var f=function(x){this.value=x};
	var g=function(){return f};
	var a=new g;
	var b=g();
	alert(a==b);
	alert(function(){}==function(){});//参考
}
いつか隠しページについての実験をやりたい。
top  戻る