JavaScript再入門その2

JavaScriptの関数とメソッドより

関数もオブジェクトである

function文での関数定義
function myFunc(arg)
{
    alert(arg);
}

myFunc("hoge");    // hoge と表示される。
Functionコンストラクタでの関数定義
var myFunc = new Function("arg", "alert(arg);");

myFunc("hoge");    // hoge と表示される。
関数の代入
function funcA() 
{
    alert("関数A");
}

var funcB = funcA; // 関数の代入

funcB();           // 関数A と表示される。

メソッドもプロパティである

メソッドの定義
function func() 
{
    alert("関数です。");
}

var obj = new Object();
obj.method = func;    // 関数の代入

obj.method();

無名関数の定義

無名関数の定義
var obj = new Object();

obj.method = function(arg)
{
    alert(arg);
}

obj.method("テスト");    // テスト と表示される

高階関数

関数を引数に取る関数
// 配列の全要素に指定した関数を実行する
function eachArray(arr, func) {
    for (var i=0; i<;arr.length; i++) {
        func(arr[i]);
    }
}

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
eachArray(array, alert);

引数の秘密

JavaScriptでのシグネチャに一致しない関数呼び出し
function myFunc(arg1, arg2) {
    alert(arg1 + ":" + arg2);
}

myFunc("arg1", "arg2");                // 通常の呼び出し
myFunc();                              // 引数の数が足りない
myFunc("arg1", "arg2", "arg3");        // 引数の数が多い

argumentsオブジェクト

function myFunc(arg1, arg2) {
    // arguments[0] は第一引数を指すので true
    alert(arg1 == arguments[0]);
    // シグネチャに無い 第四引数にアクセスする事ができる
    alert(arguments[3]);
}

// 二回目のアラートは arg4 と表示される。
myFunc("arg1", "arg2", "arg3", "arg4");

まとめ

  • 関数はオブジェクトである。
  • メソッドというのは、関数オブジェクトの参照を保持している、ただのプロパティである。
  • 無名関数という関数の定義方法がある。
  • 関数を引数に渡すことができる。
  • argumentsオブジェクトという引数を表すオブジェクトが存在する。