[JavaScript]単純なコールバック関数を簡単に記述できる関数

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[JavaScript]単純なコールバック関数を簡単に記述できる関数

あらかじめ定義しておくと少し便利かもしれない。

function $FN(fn) {
    return (typeof fn == 'function') ? fn : Function('x', 'return ' + fn);
}

引数が関数であればそのまま返し、文字列であれば、function anonymous(x) { return 引数 }という無名関数に変換して返す関数。

簡単な使い方は↓のとおり。

var fn = $FN('x + 1');
window.alert(fn(1));    //2

この例では、function(x) { return x + 1; }$FN('x + 1')に短縮されたというメリットしか感じ取れないかもしれない。

しかし、単純なコールバック関数を引数として受け取る関数に、この$FNを使っておくとかなり便利だと思う。

function someFunc(callback) {
    callback = $FN(callback);

    return callback(2);
}

someFunc('x + 2');    //4
someFunc(function(x) { return x + 2; });    //4

コードがかなりすっきりするのがわかると思う。

prototype.jsの$関数と同様に、既に目的の型だった場合はそのまま返すようにしているので、上のsomeFuncのように関数に埋め込んでおけば、関数型も文字列型も両方受け取れる関数が作れるはず。

普及してくれないかなー

実は

この関数の着想はjQueryのmap関数から。

// If a string is passed in for the function, make a function
// for it (a handy shortcut)
if ( typeof fn == "string" )
    fn = eval("false||function(a){return " + fn + "}");

本当にa handy shortcutだと思う。

jQueryのほうではevalを使っているが、evalだとIE向けのハックが必要になるので、普通にFunction関数を使って関数を生成するようにしてみた。

ついでに

↓これぐらい用意しておけば十分かな…

function $FX(fn) {
    return (typeof fn == 'function') ? fn : Function('x', 'return ' + fn);
}
function $FXY(fn) {
    return (typeof fn == 'function') ? fn : Function('x', 'y', 'return ' + fn);
}
function $FXYZ(fn) {
    return (typeof fn == 'function') ? fn : Function('x', 'y', 'z', 'return ' + fn);
}

Function関数(or コンストラクタ)は意外と知られていないけど、便利だと思う。

スポンサーサイト

関連記事

トラックバック URL

http://liosk.blog103.fc2.com/tb.php/64-0f6c6411

トラックバック

コメント

コメントの投稿

お名前
コメント
編集キー
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。