01月06日
javascriptで関数の引数を不定にしてみる
あけましておめでとうございます。
本年もよろしくお願いいたします。
新年一発目のエントリは技術ネタ、というかTipsというか、あんまり使いどころがよく分からんというか。。。
javascriptは関数の引数に変数を与えなくても
-
function hoge() {
-
var arg1 = arguments[0];
-
var arg2 = arguments[1];
-
-
return arg1+arg2;
-
}
-
-
var sum = hoge(1, 2);
なんて感じで引数を取ることが出来ちゃうんですけれども、これだと引数の順番が固定になっちゃったりで、いまいちフレキシブルではないので、もうちょっと柔軟に出来んもんか、と考えたのがオブジェクトを渡す方法。
-
function hoge(args) {
-
var arg1 = args["arg1"];
-
var arg2 = args["arg2"];
-
-
return arg1 + arg2;
-
}
-
-
var sum = hoge({"arg1":1, "arg2":2});
キーと変数渡してやればどうでしょ?ということで。
で、何の役に立つねん?というとこなんですが、実行したい関数を変数で与えて、その引数が関数毎に微妙に違うけど、処理は共通、みたいな。ややこしや。
-
var funcs = {
-
//var getMemberPhoto = function(args) { <- 文法ミス
-
getMemberPhoto : function(args) {
-
var params = {
-
member_id:args["member_id"]
-
};
-
...
-
},
-
//var getCategoryPhoto = function(args) { <- 文法ミス
-
getCategoryPhoto : function(args) {
-
var params = {
-
category_id:args["category_id"]
-
};
-
...
-
},
-
//var getPhotoByPeriod = function(args) { <- 文法ミス
-
getPhotoByPeriod : function(args) {
-
var params = {
-
start_date:args["start_date"],
-
end_date:args["end_date"]
-
};
-
....
-
}
-
};
-
-
function getPhotos() {
-
var func = $("input[name=select_func]:checked").val();
-
var params = {};
-
$("#" + func + " .params").each(function() {
-
params[$(this).attr("name")] = $(this).val();
-
});
-
-
if (typeof funcs[func] == "function") {
-
funcs[func](params);
-
}
-
}
(追記)JSの文法ミスってました(汗)
と、こんな感じで使えるよね?ということで(引数、微妙にも違ってないし)。
要jQueryなコードで、且つ実際に組んだコードではないので(爆)←古い、動かない可能性大ですが何かの参考にでもなれば。
ってならんな、こんなん。どこで使うねん。
> 以下のコードって文法ミスのような気がするけど…
var funcs = {
var getMemberPhoto = function(args) {}
}
funcs = {
getMemberPhoto : function(){ }
};
> キーと変数渡してやればどうでしょ?ということで。
> で、何の役に立つねん?というとこなんですが、
// 引数の数多くて、かつ、どれかを省略したいときに便利
function hoge(a, b, c, d, e, f, g){ };
// 下のように使うときが多い。
// ポイントは、関数に渡すパラメータが多いとき、
// 引数が省略されたときのデフォルト値を次のように定義しておいて、
// for inループで、渡された変数を初期化してあげる。
function hoge(param)
{
var a = 0, b = 0, c = 0;
for(var i in param)
{
switch(i)
{
case ‘a’: a = param[i]; break;
case ‘b’: b = param[i]; break;
};
};
};
掲載日: 2010年01月7日 12:10 AM by 翔護
> 翔護さん
あぁぁぁぁぁぁぁ、お恥ずかしいぃぃぃヽ(´Д`ヽ)(/´Д`)/
速攻、修正しましたw
for inで回すのもナルホドねぇ。これはこれで使いでがありそう。
また後日、改良版(改悪?)でネタにさせて頂きますm(_ _)m
(・∀・)ニヤリ
掲載日: 2010年01月7日 12:31 AM by 板