JavaScript 第5版 - 8章 関数(2)

JavaScript 第5版、「8章 関数」の「8.3 データとしての関数」~「8.7 ユーティリティ関数」(132~140ページ)を読み進めていきます。

8.6 関数のプロパティとメソッド

8.6.1 lengthプロパティ

  • Functionオブジェクトのlengthプロパティは、関数宣言時の引数の個数を示す。

Argumentsオブジェクトのlengthプロパティと、Functionオブジェクトのlengthプロパティとを比較することで、宣言時と同じ個数の引数が渡されているかを確認することもできます。

function check(args) {  // Argumentsオブジェクトを引数に取る
    var actual = args.length;  // 関数呼び出し時の引数の個数
    var expected = args.callee.length  // 関数宣言時の引数の個数
    if (actual != expected) {
        throw new Error('Wrong number of arguments: expected: ' + expected + '; acutually passed ' + actual);
    }
}

function f(x, y, z) {
    check(arguments);
    return x + y + z;
}

8.6.3 自分専用の関数プロパティの定義

  • Functionオブジェクトにプロパティを追加すると、関数の実行終了後でも値を保持し続けられる。

例えば、関数の内部でしか使用されないような値を保持しておきたい場合、関数自身にプロパティを追加すると、名前空間の衝突やグローバル変数の汚染を避けられます。

uniqueInteger.counter = 0;

// 呼び出されるたびに一意の整数を返す関数
function uniqueInteger() {
    return uniqueInteger.counter ++;
}

8.6.4 apply()メソッドとcall()メソッド

  • apply()メソッドとcall()メソッドは、関数をあるオブジェクトのメソッドであるかのように呼び出すことができる。

apply()メソッドとcall()メソッドは同じような働きをしますが、関数に渡す引数の指定方法が異なります。

f.call(o, 1, 2);
f.apply(o, [1, 2]);  // apply()メソッドは、関数に渡す引数を配列形式で指定する。

// これらは、次のように記述したのとほぼ同じ意味。
o.m = f;
o.m(1, 2);
delete o.m;

また、apply()メソッドを使って、配列の要素を関数の引数として渡すこともできます。

var a = [3, 1, 2];
var biggest = Math.max.apply(null, a);  // Math.max()関数は可変長引数関数。

8.7 ユーティリティ関数

138~140ページに、オブジェクトや配列、関数を操作するための便利なユーティリティ関数が掲載されています。

コメント (0)

この記事へのコメントはまだありません。

コメントフォーム

トラックバック (0)

この記事へのトラックバックはまだありません。

この記事のトラックバックURI
http://dxd8.com/archives/74/trackback/
この記事のURI
http://dxd8.com/archives/74/