2009年2月27日金曜日

Argumentsオブジェクト

JavaScriptの関数は、引数の数が固定ではありません。
だから、

function test1(a, b, c) {
/*コード*/
}

とか書いても、

test1("test1");

と呼び出すことができます。
引数が少なかった場合は、残りの引数はundefinedになります。
じゃあ、多かった場合はどうするの?ってことになりますが、
それは Argumentsオブジェクトを利用して取得することができます。
下記はArgumentsオブジェクト(argments)を使って引数を取り出しています。

function argument_test() {
str = "";
for (var i = 0;i <= arguments.length;i++) {
   str += arguments[i];
}
document.getElementById("result").innerHTML = str;
}

function load_func() {
argument_test("test1", "test2", "test3");
}

上記は、test1test2test3が出力されます。

引数にオブジェクトを渡して for/in文で取り出すなんかもできます。

function argument_object_test() {
str = "";
for (var i = 0; i < arguments.length; i++) {
var target = arguments[i];
for (var name in target) {
str += target[name] + " ";
}
}
document.getElementById("result").innerHTML = str;
}

function func1() {
argument_object_test({
aibu: "saki",
horikita: "maki",
ueto: "aya",
});
}


これはJQuerryなんかでも使われていて、

jQuery.extend = jQuery.fn.extend = function() {
// copy reference to target object
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;

のようにArgumentsオブジェクトを利用しています。
で利用する側は

jQuery.fn.extend({
show: function(speed,callback){
....
});

のようにオブジェクトを渡したりしています。

DHTMLのコンテンツばかり書いていると、
このようなコアJavaScriptについてついつい忘れてしまうものです。
もっと勉強しないとね。


0 件のコメント: