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

Function.apply

ID: FN0208001 Product: Flash

Platform: All
Version: MX

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

引数
オブジェクト  myFunctionを適用するオブジェクト。

argumentsObject  配列で、その要素をmyFunctionに引数として渡します。

戻り値
呼出された'function'の指定する値。

説明
メソッド; ActionScriptから呼出す'function'に対して、使用する'this'の値を指定します。このメソッドは、呼出した'function'に渡す引数も、指定することができます。'apply'はFunctionオブジェクトのメソッドなので、ActionScript中のすべての'function'のメソッドでもあります。

引数は、Arrayオブジェクトとして指定します。これは、実際にスクリプトを実行するまで、渡すべき引数の数がわからないときに便利です。


以下の'function'呼出しは、同じ処理になります。

Math.atan2(1, 0)
Math.atan2.apply(null, [1, 0])

入力用のフィールドを配置して、ユーザーが実行する'function'の名前を入力できるFlashムービーを作成することができます。'function'に渡す任意の引数も入力できるようにします。"呼出し"ボタンを押すと、'apply'メソッドを使ってその'function'を呼出し、引数を指定します。

このサンプルでは、ユーザーは'function'の名前を、"functionName"という入力テキストフィールドに指定します。引数の数は、"numParameters"という入力テキストフィールドに指定します。10個までの引数は、"parameter1"、"parameter2"から、"parameter10"までに指定します。

on (release) {
callTheFunction();
}
...
function callTheFunction()
{
   var theFunction = eval(functionName.text);
   var n = Number(numParameters.text);   // [訳者註]原文は'text'プロパティを使用していません。訳者による修正です。
   var parameters = [];
   for (var i = 0; i < n; i++) {
     parameters.push(eval("parameter" + (i + 1) + ".text"));   // [訳者註]同上。および+ 1を追加しました。
   }
   theFunction.apply(null, parameters);
}

[訳者註] 'Function.apply'メソッドは、適用する関数を、指定したオブジェクトのメソッドであるかのように実行します。つまり、'this'キーワードの値として参照されるオブジェクトを、引数として指定できることに特徴があります。したがって、上記サンプルのようにこの引数を'null'とするのは、むしろ特殊な用法にあたります。

[訳者註2] 以下のサンプルは、Objectオブジェクトのインスタンスoに対して'Array.push'メソッドを適用してエレメントを追加し、さらに'Array.toString'メソッドを使って結果を確認しています。oの本来のメソッド'Object.toString'は、'Array.toString'とは出力結果が異なります。また、'Array.push'メソッドを適用したことにより、'length'プロパティの値が設定・更新されていることを、ご確認ください。

o = {a:"test a", b:"test b"};
trace("Length of o: " + typeof o.length);
trace("Result of built-in toString: " + o.toString());
Array.prototype.push.apply(o, [100]);
trace("Length of o: " + o.length);
Array.prototype.push.apply(o, [200]);
trace("Length of o: " + o.length);
trace("Result of applying Array's toString: " + Array.prototype.toString.apply(o));
// 出力ウィンドウの結果
Length of o: undefined
Result of built-in toString: [object Object]
Length of o: 1
Length of o: 2
Result of applying Array's toString: 100,200

Player
Flash Player 6以降。

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

_____

作成者: 野中文雄
作成日: 2002年8月24日


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