JSにおける構造関数の詳細解析

1084 ワード

JavaScriptでは、任意の合法的な関数が対象のコンストラクタとして機能することができます。これはシステム内蔵関数とユーザー自身が定義した関数を含みます。関数がコンストラクタとして実行されると、その内部のthis属性は関数自体を参照します。
一般的に、コンストラクタは戻り値を示さず、これらはthisポインタによって伝達されたオブジェクトを初期化するだけで、何も返さない。一つの関数に戻り値があると、返されたオブジェクトはnew表現の値になります。形式的に見ると、一つの関数が構造関数として使われるか、それとも普通関数として実行されるかの唯一の違いは、new演算子を使用するかどうかです。上記の説明は、実際にはより正確な意味を持っています。この関数は、戻り値がある場合には、関数の戻り値に分けられます。参照の種類と値の種類の2つの場合です。関数の戻り値が参照タイプ(配列、オブジェクトまたは関数)のデータである場合、この関数は構造関数としてnew演算子で構成を実行すると、演算の結果はその戻り値に置き換えられます。例えば、

function test()
{
   this.a=10;
   return function()
   {
      return 1;
   }
}
alert m=new test();
var n=test();
alert(m);// return
alert(n);// return
の実行結果mの値は、nの値と同じで、test関数が返したクローズドパケットであり、this参照の対象とthis.a=10の割当値は全て破棄される。関数の戻り値が値の種類である場合、この関数は構造関数としてnew演算子で構成されている場合、その戻り値は破棄されます。new表現の結果は、依然としてthisが参照するオブジェクトです。

function test()
{
   this.a=10;
    return 1;
}
alert m=new test();
var n=test();
alert(m)// 【Object】
alert(n)// 1.