JavaScript/Function/prototype/call
Function.prototype.call() は、関数を呼び出す際に this の値を指定し、引数を個別に渡すメソッドです。このメソッドは、関数の実行コンテキストを動的に変更するために使用されます[1]。
構文
編集func.call(thisArg[, arg1[, arg2[, ...]]])
func: 呼び出す対象の関数。thisArg: 関数内でthisとして参照される値。非厳格モードではnullやundefinedを渡すとthisはグローバルオブジェクト(ブラウザではwindow)に置き換えられます。arg1, arg2, ...: 関数に渡す引数(省略可能)。
例
編集関数を呼び出し、this を指定するプログラム
編集以下のプログラムは、Function.prototype.call() を使用して関数を呼び出し、this の値を指定します。
const person = { name: 'Alice', greet: function(message) { console.log(`${message}, ${this.name}!`); } }; const anotherPerson = { name: 'Bob' }; person.greet.call(anotherPerson, 'Hello'); // "Hello, Bob!"
このプログラムでは、person オブジェクトの greet メソッドを呼び出していますが、this の値を anotherPerson に設定しています。これにより、greet メソッド内の this.name は Bob を参照します。
引数を個別に渡して関数を呼び出すプログラム
編集以下のプログラムは、Function.prototype.call() を使用して引数を個別に渡して関数を呼び出します。
function sum(a, b, c) { return a + b + c; } console.log(sum.call(null, 1, 2, 3)); // 6
このプログラムでは、sum 関数に引数 1, 2, 3 を個別に渡しています。call() を使用することで、引数を個別に関数に渡すことができます。
注意点
編集- thisArg の挙動:
thisArgがnullやundefinedの場合、非厳格モードではthisはグローバルオブジェクト(ブラウザではwindow)に置き換えられます。厳格モードではnullやundefinedがそのままthisとして使用されます。 - 引数の数:
call()は、関数に渡す引数の数を動的に変更することができます。これにより、可変長引数を扱う関数を柔軟に呼び出すことができます。 - パフォーマンス: 現代の JavaScript では、
call()の代わりにスプレッド演算子(...)を使用することが推奨される場合があります。スプレッド演算子はより簡潔でパフォーマンスが良い場合があります。 - apply() との違い:
call()は引数を個別に渡すのに対し、apply()は引数を配列として渡します。どちらを使用するかは、引数の渡し方に応じて選択します。
脚註
編集- ^ これは、関数の
this値を制御し、引数を個別に渡すために使用されます。
外部リンク
編集