2012-05-06 7 views
1

私は、次の2つの機能があります。2つの関数のコードを異なる引数で組み合わせるにはどうすればよいですか?

function mvcOnFailure(message) { 

    $.modal({ 
     title: "MVC Error", 
     closeButton: true, 
     content: message, 
     ... 
    }); 
} 

function ajaxOnFailure(ajaxContext) { 

    $.modal({ 
     title: "Ajax Error", 
     closeButton: true, 
     content: ajaxContext.responseText, 
     ... 
    }); 
} 

彼らの両方が同じことを行う(一部の行は省略)が、異なる引数を取ります。これらの機能を組み合わせる方法はありますか?私が考えていることは、どういうわけか、ダイアログを開いたり、他の2人にそれを継承させたりといった仕事の大部分を行うための機能を何らかの形で持っていることです。

+5

これはC#ではありません。 – BoltClock

+0

なぜこのタグはC#ですか? – ChrisWue

+0

今はポスターで変更されています。間違ったタグを残して申し訳ありません。 –

答えて

3

私が考えているのは、どういうわけか、ダイアログを開いたり、他の2人がそれを継承したりするなど、ほとんどの作業を行う機能があるということです。

ない継承、しかし、はい、第三の機能および他の二つからコールそれに共通のコードを置きます。大まかに:

function mvcOnFailure(message) { 

    doTheCommonStuff("MVC Error", message /*, other, stuff */); 
} 

function ajaxOnFailure(ajaxContext) { 

    doTheCommonStuff("Ajax Error", ajaxContext.responseText /*, other, stuff */); 
} 

function doTheCommonStuff(title, content /*, other, stuff */) { 
    $.modal({ 
     title: title, 
     closeButton: true, 
     content: content 
     ... 
    }); 
} 
0

両方のコールバックで同じ機能を使用できます。パラメータを確認するだけです。この場合、私はそれがオブジェクトか文字列(MVCに精通していませんが、私はそれがオブジェクトであると思います)かどうかを調べようとします。

しかし、これは難しいかもしれません(実際には実行する制御変数選択コードを渡す)悪いコーディングと見なすことができるので、関数を保持しながら出力をフォーマット/作成する汎用関数を呼び出すとよりよい解決策になる。

0

messageのパラメータが異なるとします。だから、一つに両方の機能を組み合わせることが可能でなければなりません:あなたはbindを使用することができますES5で

function mvcOrAjaxOnFailure(message) { 
    $.modal({ 
     title: message.responseText ? "Ajax (XHR) Error" : "MVC Error", 
     closeButton: true, 
     content: message.responseText || message, 
     ... 
    }); 
} 
0

だけではなく、別のコンテキストオブジェクトを使用して新しい機能を作成するには、だけでなく、カリー化を実行します(http:// EN .wikipedia.org /ウィキ/カリー化):

function displayModal(title, message) { 
    $.modal({ 
     title: title, 
     closeButton: true, 
     content: message, 
     ... 
    }); 
} 

var mvcOnFailure = displayModal.bind(undefined, "MVC Error"); 
var ajaxOnFailure = displayModal.bind(undefined, "Ajax Error"); 

は今、あなたは、最初の引数(title)が既に設定されている二つの新しいdisplayModalの機能を持っています。だから、例えば、あなたが呼び出すとき:

mvcOnFailure("foo"); 

"foo" というmessage引数、およびtitle自動的に "MVCエラー" となります。

関連する問題