本頁の目次 目次 次頁: 15-4_Array_Objects 前頁: 15-2_Object_Objects
Function がコンストラクタとしてではなく関数として呼出される場合、それは新しい Function オブジェクトを作成し初期化する。したがって、関数呼び出し Function(…) は、同じ引数をとるオブジェクト生成式 new
Function(…) と等価である。
Function 関数がある引数 p1, p2, …, pn, body (n が 0、つまり、"p" 引数がないかもしれず、 body も提供されないかもしれない) で呼出される場合、次のステップが取られる:
Function が new
式の一部で呼出されるとき、それはコンストラクタである: それは新たに生成されたオブジェクトを初期化する。
最後の引数は、関数の本文(実行可能なコード)を指定する; 先行する引数は仮引数を指定する。Function コンストラクタががある引数 p1, p2, …, pn, body (n が 0、つまり、"p" 引数がないかもしれず、 body も提供されないかもしれない) で呼出される場合、次のステップが取られる:
prototype プロパティは、関数がコンストラクタとして使用される可能性に備え、すべての関数に自動的に作成される。
NOTE 指定される各仮引数のために 1 引数を持つのは許容されるが、必須ではない。
例えば、次の 3 つの表現はすべて同じ結果を生む:
new Function("a", "b", "c", "return a+b+c") new Function("a, b, c", "return a+b+c") new Function("a,b", "c", "return a+b+c")
Function コンストラクタの内部 [[Prototype]] プロパティは Function プロトタイプオブジェクト (15.3.4) である。 内部プロパティと length プロパティ (値は1) の他に、 Function コンストラクタは次のプロパティを持つ:
Function.prototype の初期値は Function プロトタイプオブジェクト (15.3.4) である。
このプロパティは属性 { DontEnum, DontDelete, ReadOnly } である。
Function プロトタイプオブジェクトはそれ自体が Function オブジェクトであり (その [[Class]] が "Function" である)、起動された時、どんな引数も受け付け、undefined を返す。
Function プロトタイプオブジェクトの内部 [[Prototype]] プロパティの値は、Object プロトタイプオブジェクト(15.3.2.1) である。
それは "空の本文" をもつファンクションである; 呼び出されれば、単に undefined を返す。
Function プロトタイプオブジェクトは、自分自身の valueOf プロパティを持たない; だが、Object プロトタイプオブジェクトの valueOf プロパティを継承する。
Function.prototype.constructor の初期値は、組込み Function コンストラクタである。
関数の実装依存の表現が返される。この表現は FunctionDeclaration の構文を持つ。表現文字列内の空白、行終端子、セミコロンの使用及び配置は実装依存であることに特に注意。
toString
関数は汎用的ではない; その this
値が Function オブジェクトでなければ、例外 TypeError を投げる。それゆえ、メソッドとして他の種類のオブジェクトに転用できない。
apply
メソッドは 2 つの引数、 thisArg および argArray をとり、オブジェクトの [[Call]] プロパティを使用して、関数呼出しを実行する。オブジェクトが [[Call]] プロパティを持っていない場合、例外 TypeError が投げられる。
thisArg が null または undefined の場合、呼出された関数は this
値としてグローバルオブジェクトを渡される。そうでなければ、呼出された関数は this
値として ToObject(thisArg) を渡される。
argArray が null または undefined の場合、呼出された関数は引数を渡されない。そうでなければ、 argArray が配列でも arguments オブジェクト (10.1.8 参照) でもない場合、例外 TypeError が投げられる。 argArrayが 配列または arugments オブジェクトのいずれかである場合、関数は (ToUint32(argArray.length)) 個の引数argArray[0], argArray[1], ... argArray[ToUint32(argArray.length)-1] を渡される。
apply
メソッドの length プロパティは 2 である。
call
メソッドは 1 つ以上の引数を取り、thisArg および(選択的に) arg1, arg2, ... をとり、オブジェクトの[[Call]] プロパティを使用して、関数呼び出しを実行する。オブジェクトが [[Call]] プロパティを持っていない場合、TypeError 例外が投げられる。呼出された関数は、引数として arg1、arg2 などを渡される。 thisArg が null または undefined の場合、呼出された関数は this
値としてグローバルオブジェクトを渡される。そうでなければ、呼出された関数は this
値として ToObject(thisArg) を渡される。 call
メソッドの length プロパティは 1 である。
必須の内部プロパティに加えて、各ファンクション実体は [[Call]] プロパティ、 [[Construct]] プロパティ、 [[Scope]] プロパティ (8.6.2 及び 13.2 を参照) を持つ。[[Class]] プロパティの値は "Function" である。
length プロパティの値は通常、関数に期待される "典型的な" 引数の数を示す整数\である。だが、言語はそれ以外の数の引数\で関数が呼び出されることを許す。length プロパティによって指定される以外の数の引数\で呼び出された時の関数の振舞いは、関数に依存する。このプロパティは属性 { DontDelete, ReadOnly, DontEnum } である。
prototype プロパティの値は、Function オブジェクトがコンストラクタとして呼出される前に、新しく作成されるオブジェクトの内部 [[prototype]] プロパティの初期化に使用される。このプロパティは属性 { DontDelete } である。
F を Function オブジェクトと仮定する。F の [[HasInstance]] メソッドが値 V で呼出されるとき、次のステップが取られる: