Macromedia Flash非公式テクニカルノート

Function.call

ID: FN0212001 Product: Flash

Platform: All
Version: MX and above

シンタックス
myFunction.call(オブジェクト, 引数1, ..., 引数N)

引数
オブジェクト  'function'本文中の'this'の値を指定します。

引数  myFunctionに渡す引数。0あるいは任意の数の引数が指定できます。

戻り値
[訳者註] 原文には「なし」(Nothing)とありますが、誤りです。呼出された'function'が指定する戻り値を返します。

説明
メソッド; Functionオブジェクトに帰属する'function'を呼出します。ActionScriptのあらゆる'function'は、Functionオブジェクトに帰属します。したがって、すべての'function'が'call'メソッドをサポートします。

通常は、'call'メソッドでなく、関数呼出し演算子(())が使用されます。関数呼出し演算子は、コードを簡潔で読みやすいものにします。'call'メソッドが有用なのは、おもに呼出す'function'の'this'参照を明示的にコントロールする必要があるときです。通常、'function'がオブジェクトのメソッドとして呼出されると、'function'の本文中で'this'は、以下の場合ならmyObjectに設定されます。

myObject.myMethod(1, 2, 3);

状況によっては、'this'を別のものに対する参照にしたいことがあります。たとえば、ひとつの'function'をあるオブジェクトのメソッドとして呼出す必要があり、けれどもそのオブジェクトのメソッドとしては実際に設定されていない場合です。

myObject.myMethod.call(myOtherObject, 1, 2, 3);

引数[オブジェクト]に'null'値を指定すれば、'function'をオブジェクトのメソッドとしてではなく、通常の関数として呼出すことができます。たとえば、以下の関数呼出しは、同じ処理になります。

Math.sin(Math.PI / 4)
Math.sin.call(null, Math.PI / 4)


以下のサンプルは、'call'メソッドを使って、他のオブジェクトに'function'を設定することなく、そのオブジェクトのメソッドとして実行しています。

function MyObject() {
}
function MyMethod(obj) {
   trace("this == obj? " + (this == obj));
}
var obj = new MyObject();
MyMethod.call(obj, obj);

'trace'アクションは、出力ウインドウに以下のテキストを表示します。

this == obj? true

Player
Flash Player 6以降。

関連項目
[訳者註] Function.apply

出典
ActionScript Dictionary(英文改訂版)より邦訳。

_____

作成者: 野中文雄
作成日: 2002年12月9日


Copyright © 2001-2006 Fumio Nonaka.  All rights reserved.