シナリオ 1:
var yx01 = new function() {return "center of Circle"};
alert(yx01);
シナリオ 1 のコードを実行すると、「[オブジェクト object]」が返されます。このときのコードは次と同等です:
function anonymous class(){
return "center of Circle"
}
var yx01 = new anonymous class( );
alert(yx01); us シナリオ 1 のコードに次の変更を加えます。 🎜>alert(yx01);
実行すると、返されるのは「円の中心」です。これはなぜでしょうか。
new 式の後のコンストラクターが参照オブジェクト (配列、オブジェクト、関数など) を返す限り、プリミティブ型を返す場合 (リターンなし)、new によって作成された匿名オブジェクトを上書きします。実際には、元の型が未定義に返され、 new
によって作成された匿名オブジェクトが返されます。これは、new String が文字列リテラルではなくオブジェクトを構築するためであり、new String(x) がパラメータを取る場合は、アラートが表示されます。そうなった場合は x を返します。したがって、yx01 は新しい String("center of thecircle") オブジェクトを返し、アラート yx01 は「円の中心」を表示します。
シナリオ 2:
var yx02 = function() {return "円の中心"}();
alert(yx02);このときのコードは次と同等です:
var anonymous function = function() {return "center ofcircle"};
yx02 = anonymous function();
alert(yx02); 明らかに、yx02 は匿名関数の実行結果の値を返します。つまり、yx02 は「円の中心」です。
もちろん、匿名関数の実行結果は匿名オブジェクトになることもあります。具体的な一般的なアプリケーションについては、「JavaScript のモジュール パターン
」
を参照してください。