トップ «前の日記(2007-11-10) 最新 次の日記(2007-11-15)» 編集

Ussy Diary


2007-11-13

call と apply

Math.max.apply(this, [4, 7, 2, 1]); // 7

こんな感じのコードをみて最初何してるの?と思いました。

適当に WEB で調べてみると arguments がキーになりそう。

function foo() {
    return arguments;
}

foo.apply(this, [1, 5, 3]); // [1, 5, 3]
foo.call(this, [1, 5, 3]); // [[1, 5, 3]]
foo.call(this, 1, 5, 3); // [1, 5, 3]

call で呼び出した場合は、可変長に渡した引数が arguments として正しく理解されています。

動的に引数が変化するものを許可する関数(今回でいえば Math.max)を作成したい場合には、 arguments から引数をとり、 apply で呼び出すようにコーディングすればいいのかな。

call は引数が静的なため処理、特に無名関数を利用した軽いインターフェースに利用しそう。(呼ばれる)

function foo(func) {
    func.call(this, "Hello!");
}

foo(function(message) {
    window.alert(message);
}

apply はユーティリティ的な関数。(呼ぶ)

call と apply の使い方(呼ばれる、呼ぶ)は自分の勝手なイメージです。

何はともあれ少しだけ理解が深まりました。

Tags: JavaScript