[JS]関数メソッド呼び出し、適用


関数を実行する方法には、関数()を使用して関数を呼び出す方法、新しいキーワードを使用して呼び出す方法、関数メソッドを使用して呼び出す方法、アプリケーションを使用して呼び出す方法があります.
function add(x,y) {
  console.log(x + y);
}
add(2,8); // 10
add.call(null, 2, 8); // 10
add.apply(null, [2,8]); // 10
上記の例では、呼び出しの仕方は異なりますが、結果は同じです.
呼び出しメソッドにおけるパラメータの役割を詳細に説明します.

call & apply


func.call(thisArg[, arg1[, arg2[, ...]]])
func,apply(thisArg, [argArray])
thisArg:func呼び出しで指定されたthis値
最初のパラメータとして入力されたthisArgは、関数の実行時にthisを決定します.
2番目から入力したパラメータがcall時に関数実行時に渡されるパラメータリストを受信し、applyでパラメータの単一配列を受信します.
次の例では、2つの方法の違いを説明します.
function add(x,y) {
 this.val = x + y;
  console.log(this.val);
}

let obj = {
  val : 0
}

add.call(obj, 2, 8);// 10
add.apply(obj, [2, 8]);// 10
  • 配列をパラメータとしてapplyに送信

  • let arr = [10, 25, 15, 3, 21];
    Math.max(arr);// NaN
    Math.max.apply(null, arr);// 25
    Math.max()のパラメータはNumberTypeのみですがarrは配列なのでNaNを返します.この場合、applyを使用してarrの最値を検索できます.
    次の例ではcall、applyを使用して並べ替えます.
    function moreThanFive(str) {
    	return str.length > 5;
    }
    let arr = ['one', 'two', 'three', 'four', 'five'];
    arr.filter(moreThanFive);// ['three']
    Array.prototype.filter.call(arr, moreThanFive);// ['three']
    Array.prototype.filter.call(arr, [moreThanFive]);// ['three']
    でもここでCallやApplyを使う必要はありませんしかし,アレイではなく類似のアレイであれば,Array法を用いることはできない.この場合,callとapplyを用い,類似アレイでもArrayの方法を用いることができる.