JavaScript

Function.prototype.apply()メソッド

 編集:2022.08.12 by T.A.

関数を呼び出し、指定の this 値と指定の引数(配列風)を渡します。

func.apply(thisArg, [ argsArray])
func 呼び出す関数
thisArg this の値で、func の呼び出しで提供されます。

このメソッドで指定した this が必ず呼び出したメソッドで参照されるわけではないことに注意してください。もし呼び出したメソッドが厳格モードではないコード内の関数であれば、ここで渡した値が null もしくは undefined であった場合はグローバル・オブジェクトに置き換えられ、プリミティブ型の変数はボックス化されます。
この引数は必須です。

argsArray 1 つの配列風のオブジェクトであり、func 関数が呼ぶことになる引数を列挙したものです。関数に引数が渡されない場合は null または undefined となります。

ECMAScript 5 以降ではこれらの値は配列ではなく配列風のオブジェクトを用いる事になりました。後述のブラウザーの互換性を参照してください。

戻り値: 指定した this と引数で関数を呼び出した結果が返ります。

注: 関数の構文は call() メソッドとほぼ同じですが、根本的な違いは call() メソッドは連続した引数のリストを受け取るのに対して、apply() メソッドが引数の配列を 1 つだけ受け取るという点です。

注: 最初の引数が undefined または null の場合、配列のスプレッド構文を使用して同様の結果を得ることができます。

存在する関数を呼び出す時は通常と異なる this オブジェクトを渡すことができます。this はカレント・オブジェクト、呼び出したオブジェクトを参照します。apply を用いることで、新たなオブジェクトのためにそのメソッドを書き直すことなく継承させることができます。

apply は、対応する引数の型を除けば call() によく似ています。引数のリストの代わりに引数の配列を用いることができます。apply は配列リテラルを引数に用いることもできます。例えば func.apply(this, ['eat', 'bananas']) のように利用でき、同様に配列オブジェクトを func.apply(this, new Array('eat', 'bananas')) のように利用できます。

argsArrayarguments を利用することもできます。arguments は関数内のローカル変数です。これは、呼び出されたオブジェクトの不特定の引数すべてに対して用いることができます。つまり、apply メソッドを使うにあたって呼び出されたオブジェクトの引数について知る必要がないのです。arguments を利用することで、引数のすべてを呼び出されたオブジェクトに渡すことができます。引数の扱いは、呼び出されたオブジェクトが受け持ちます。

ECMAScript 第5版以降では、配列風のオブジェクトも使えます。具体的には、length プロパティとその範囲(0 から length-1 まで)の整数の名称のプロパティを持った、あらゆる種類のオブジェクトの利用を認めています。例えば、NodeList や { 'length': 2, '0': 'eat', '1': 'bananas' } のような独自のオブジェクトを利用できます。

注: Chrome 14 や Internet Explorer 9 などのブラウザーでは、配列風オブジェクトを扱えずに例外が発生します。

//コンソールにて
const array = ['a', 'b'];
const elements = [0, 1, 2];
array.push.apply(array, elements);
console.info(array); // ["a", "b", 0, 1, 2]
A=['a', 'b'];
E=[10, 20, 30];
D=A.push.apply(A, E); //=5。配列の最後に値を追加。
	//A=["a", "b", 10, 20, 30]
function Job(P1, P2){
  return this + ":" + P1 + ":" + P2
}
D=Job.apply(10, [20, 30]); //="10:20:30"

テスト