コンテンツにスキップ

JavaScript/Function/prototype/apply

出典: フリー教科書『ウィキブックス(Wikibooks)』

Function.prototype.apply() は、関数を呼び出す際に this の値を指定し、引数を配列として渡すメソッドです。このメソッドは、関数の実行コンテキストを動的に変更するために使用されます[1]

構文

[編集]
func.apply(thisArg,[argsArray])
  • func: 呼び出す対象の関数。
  • thisArg: 関数内で this として参照される値。非厳格モードでは nullundefined を渡すと this はグローバルオブジェクト(ブラウザでは window)に置き換えられます。
  • argsArray: 関数に渡す引数の配列(または配列風オブジェクト)。省略可能で、省略すると引数なしで関数が呼び出されます。

[編集]

関数を呼び出し、this を指定するプログラム

[編集]

以下のプログラムは、Function.prototype.apply() を使用して関数を呼び出し、this の値を指定します。

constperson={name:'Alice',greet:function(message){console.log(`${message}, ${this.name}!`);}};constanotherPerson={name:'Bob'};person.greet.apply(anotherPerson,['Hello']);// "Hello, Bob!"

このプログラムでは、person オブジェクトの greet メソッドを呼び出していますが、this の値を anotherPerson に設定しています。これにより、greet メソッド内の this.nameBob を参照します。

配列を引数として関数を呼び出すプログラム

[編集]

以下のプログラムは、Function.prototype.apply() を使用して配列を引数として関数を呼び出します。

functionsum(a,b,c){returna+b+c;}constnumbers=[1,2,3];console.log(sum.apply(null,numbers));// 6

このプログラムでは、sum 関数に配列 numbers を引数として渡しています。apply() を使用することで、配列の要素が個々の引数として関数に渡されます。

注意点

[編集]
  • thisArg の挙動: thisArgnullundefined の場合、非厳格モードでは this はグローバルオブジェクト(ブラウザでは window)に置き換えられます。厳格モードでは nullundefined がそのまま this として使用されます。
  • 引数の配列: argsArray は配列または配列風オブジェクト(例えば arguments オブジェクト)である必要があります。配列風オブジェクトでない場合、TypeError が発生します。
  • 引数の数: apply() は、関数に渡す引数の数を動的に変更することができます。これにより、可変長引数を扱う関数を柔軟に呼び出すことができます。
  • パフォーマンス: 現代の JavaScript では、apply() の代わりにスプレッド演算子(...)を使用することが推奨される場合があります。スプレッド演算子はより簡潔でパフォーマンスが良い場合があります。

脚註

[編集]
  1. ^これは、関数の this 値を制御し、引数を配列として渡すために使用されます。

外部リンク

[編集]


close