Property Accessors (関数オブジェクト以外は省略)
関数オブジェクト . プロパティ名
プロパティ名は prototype
、call
、apply
のみ使用できる。
call
は関数オブジェクトの動作モードを fcfCall
モードに変更し、関数オブジェクト自身を返す。
apply
は関数オブジェクトの動作モードを fcfApply
モードに変更し、関数オブジェクト自身を返す。
fcfCall
モードの関数オブジェクトに対し .apply
演算を行うと fcfApply
モードに変更される。逆も同じ。
function a () { }
alert (a === a.call); // true
function b () { }
alert (b === b.apply); // true
function c () { }
alert (c.call === c.apply); // true
alert (c.call.apply.call.apply === c.apply.call.apply.call); // true
関数オブジェクトを通常モードに戻す手段は、恐らくない。
なお、Bracket notation のつもりで
関数オブジェクト [ "call" ]
と書くと DMonkey の言語仕様により "call"
を引数とした関数呼び出しが行われてしまうので、Dot notation でしかアクセスできない。
関数呼び出し
( )
(または[ ]
)
fcfCall
モードの関数を引数付きで呼び出すと .call()
の動作が実行される(第1引数が this
、あれば第2引数以降が arguments
)。
fcfApply
モードの関数を引数付きで呼び出すと .apply()
の動作が実行される(第1引数が this
、あれば第2引数の配列が arguments
)。
それ以外、つまり通常モードの関数や fcfCall
モードまたは fcfApply
モードの関数を引数なしで呼び出した場合は通常の関数呼び出しとして実行される(ただし this
が何になるかは違いが出る)。