訳の正確性を保証するものではありませんので必要に応じて原文であるEcma InternationalのECMA-262にある ECMA-262.pdf ( ECMA-262 5.1 Edition )を参照下さい。
訳:2012年04月 webzoit.net
Functionのprototypeオブジェクトは、Functionオブジェクト自身(、その[[Class]] が"Function")であり、呼び出される場合、引数を許容し、undefinedを返します。 Functionのprototypeオブジェクトの内部プロパティ[[Prototype]]の値は、標準組み込みObjectのprototypeオブジェクト(15.2.4)です。 Functionのprototypeオブジェクトの内部プロパティ[[Extensible]]の初期値は、trueです。 Functionのprototypeオブジェクトは、それ自身の valueOf プロパティを持たず、Objectのprototypeオブジェクトからの valueOf プロパティを継承します。 Functionのprototypeオブジェクトの length プロパティは、0です。
Function.prototype.constructor の初期値は、組み込みFunctionコンストラクタです。
(toStringは、)関数の実装依存の表現が返されます。 この表現は、FunctionDeclarationの構文を持ちます。 特筆すべきは、その利用と表示文字内のホワイトスペース、行終端、セミコロンの配置は、実装依存であるということです。 toString関数は、一般的ではなく、その this 値が、Functionオブジェクトではない場合、TypeError例外を投げます(スローします)。 その為、メソッドとしての利用における他の種類のオブジェクトに転送することができません。
applyメソッドが、引数 thisArg と argArray を伴ってオブジェクト func 上で呼ばれる際には、次のステップが取られます。
1. IsCallable(func) が、 falseである場合、TypeError例外を投げる(スローする) 2. argArray が、null または、 undefinedである場合、 a. this 値と引数のカラのリストとして thisArg を提供して func の内部メソッド[[Call]]を呼んだ結果を返す 3. Type(argArray) が、 Objectではない場合、TypeError例外を投げる(スローする) 4. len は、引数"length"を伴う argArray の内部メソッド[[Get]]を呼んだ結果とする 5. n は、 ToUint32(len) とする 6. argList は、カラのリストとする 7. index は、0とする 8. while index < n という条件下で繰り返す a. indexName は、 ToString(index) とする b. nextArg は、引数として indexName を伴う argArray の内部メソッド[[Get]]を呼んだ結果とする c. argList の最後の要素として nextArg を付加する d. index に index + 1 を設定する 9.引数のリストとして this 値と argList としての thisArg を提供して func の内部メソッド[[Call]]を呼んだ結果を返す
適用するメソッドの length プロパティは、2です。 [注釈] thisArg 値は、 this 値として変更・修正なしで渡されます。 これは、 undefined や null である場合、 thisArg が、グローバルオブジェクトを伴って置換され、 ToObject が、他の値全てに適用され、その結果が this 値として渡されることになっている第3版から変更されています。
callメソッドが、引数 thisArg と オプションの引数 arg1, arg2 ...を伴ってオブジェクト func 上で呼ばれる際には、次のステップが取られます。
1. IsCallable(func) が、 falseである場合、TypeError例外を投げる(スローする) 2. argList は、カラのリストとする 3. このメソッドが、引数を1つ以上伴って呼ばれる場合、 arg1 で始まり、左から右に順に argList の最後の要素として各引数を付加する 4.引数のリストして this 値、 argList として thisArg を提供して func の内部メソッド[[Call]]を呼んだ結果を返す
call メソッドの length プロパティは、1です。 [注釈] thisArg 値は、 this 値として変更・修正なく渡されます。 これは、 undefined や null である場合、 thisArg が、グローバルオブジェクトを伴って置換され、 ToObject が、他の値全てに適用され、その結果が this 値として渡されることになっている第3版から変更されています。
thisArg、(他にオプションとして) arg1, arg2,...と1つ以上引数を取る bindメソッドは、 次のステップを実行することにより、新たな関数オブジェクトを返します。
1. Target は、 this 値とする 2. IsCallable(Target) が、 falseである場合、TypeError例外を投げる(スローする) 3. A は、順に thisArg (arg1, arg2...) の後に提供した引数値の全てから成る新しい(カラも可能な)内部リストとする 4. F は、新しいネイティブECMAScriptオブジェクトとする 5. 8.12で記述したように F の[[Get]]を除き、全ての内部メソッドを設定する 6. 15.3.5.4 で記述したように F の内部プロパティ[[Get]]を設定する 7. F の内部プロパティ[[TargetFunction]]に Target を設定する 8. F の内部プロパティ[[BoundThis]]に thisArg の値を設定する 9. F の内部プロパティ[[BoundArgs]]に A を設定する 10. F の内部プロパティ[[Class]]に"Function"を設定する 11. 15.3.3.1 で記述したように F の内部プロパティ[[Prototype]]に標準組み込みFunctionプロトタイプオブジェクトを設定する 12. 15.3.4.5.1 で説明したように F の内部プロパティ[[Call]]を設定する 13. 15.3.4.5.2 で説明したように F の内部プロパティ[[Construct]]を設定する 14. 15.3.4.5.3 で説明したように F の内部プロパティ[[HasInstance]]を設定する 15. Target の内部プロパティ[[Class]]が、"Function"である場合、 a. L は、 Target の length プロパティから A の長さを引いたものとする b. 0または、Lの大きい方を F 自身の length プロパティに設定する 16.それ以外の場合、 F 自身の length プロパティに0を設定する 17. F 自身の length プロパティの属性に 15.3.5.1で記述した値を設定する 18. F の内部プロパティ[[Extensible]]に true を設定する 19. thrower は、関数オブジェクト(13.2.3)[[ThrowTypeError]]とする 20.引数 "caller"、PropertyDescriptor {[[Get]]: thrower, [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false}、falseを伴う F の内部メソッド[[DefineOwnProperty]]を呼ぶ 21.引数 "arguments"、PropertyDescriptor {[[Get]]: thrower, [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false}、falseを伴う F の内部メソッド[[DefineOwnProperty]]を呼ぶ 22. F を返す
bindメソッドの length プロパティは、1です。 [注釈] Function.prototype.bindを使って生成したFunctionオブジェクトは、prototypeプロパティや内部プロパティ[[Code]]、[[FormalParameters]]、[[Scope]]を持ちません。
バインド関数を使って生成された F という関数オブジェクトの内部メソッド[[Call]]が、引数 this 値と ExtraArgs のリストを伴って呼ばれる際には、次のステップが取られます。
1. boundArgs は、 F の[[BoundArgs]]内部プロパティの値とする 2. boundThis は、 F の[[BoundThis]]内部プロパティの値とする 3. target は、F の[[TargetFunction]]内部プロパティとする 4. args は、同じ順のリスト ExtraArgs と同じ値によって続く、同じ順のリスト boundArgs と同じ値を含んだ新たなリストとする 5.引数として args 、this 値として boundThis を提供して target の内部メソッド[[Call]]を呼んだ結果を返す
バインド関数を使って生成された F という関数オブジェクトの内部メソッド[[Construct]]が、引数 ExtraArgs のリストを伴って呼ばれる際には、次のステップが取られます。
1. target は、 F の[[TargetFunction]]内部プロパティの値とする 2. target が、[[Construct]]内部メソッドを一切持たない場合、TypeError例外が投げられる(スローされる) 3. boundArgs は、F の[[BoundArgs]]内部プロパティとする 4. args は、同じ順のリスト ExtraArgs と同じ値によって続く、同じ順のリスト boundArgs と同じ値を含んだ新たなリストとする 5.引数として args を提供して target の内部メソッド[[Construct]]を呼んだ結果を返す
バインド関数を使用して生成された関数オブジェクト F の内部メソッド[[HasInstance]]が、引数 V を伴って呼ばれる際には、次のステップが取られます。
1. target は、F の[[TargetFunction]]内部プロパティの値とする 2. target が、[[HasInstance]]内部メソッドを一切持たない場合、TypeError例外が投げられる(スローされる) 3. 引数として V を提供して target の内部メソッド[[HasInstance]]を呼んだ結果を返す