2016-11-09 6 views
0

私は当初どのようにするのかを尋ねていましたが、プロパティ名を渡すのと同じようにメソッド名を渡すことができます。しかし、この悪い練習ですか?それをしない理由は何ですか?ObjをParamとして呼び出すメソッドを渡します

var actionsObj = { 
    writeSomething: function(){console.log('lol');} 
    } 

    function doSomeAction(writeSomething){ 
    actionsObj[writeSomething](); 
    }; 

    doSomeAction('writeSomething'); //executes writeSomething method of actionsObj 

Plnkr

+0

問題がきちんと解決されない場合は、理由はありません。 –

+0

はい。これは問題ありません。 –

+0

全く問題はなく、次のコマンドを使ってパラメータを検証できます。typeof writeSomething == "function" – SPlatten

答えて

1

この悪い練習ですか?それを行うにはない

任意の理由は?

必要な項目によって異なります。一連のプリセットアクションから選択する関数に "動詞"を渡すことは非常に制限されており、関数自体( "コールバック")を渡すことで呼び出し元は任意のコードを渡すことができます。

が可能なアクションを制限したい場合や、有効なアクションセットがドメイン要件によって制限されている場合は問題ありませんが、それ以外の状況では柔軟性がないと感じます。コード内で可能なアクションが指定された場所

比較

function doSomeAction(actionName){ 
    var actionsObj = { 
     writeSomething: function(x){ console.log(x); }, 
     … 
    }; 
    actionsObj[actionName]('lol'); 
} 

doSomeAction('writeSomething'); 
doSomeAction('someOtherOption'); // restricted by the callee 
… 

function doSomeAction(action){ 
    action('lol'); 
} 

doSomeAction(function(x){ console.log(x); }); 
doSomeAction(anyOtherFunction); // chosen by the caller 
… 

に大きな違いがあります。 doSomeActionはそのすべてについて知る必要がありますか?毎回同じですか?

+0

私は完全に理解していません(私の非常に限定されたJSコールバックの経験と関係しています)。この場合、actionsObjを渡してメソッドを呼び出すだけでしょうか? – VSO

+0

Nah、あなたはアクションメソッド自体を渡すでしょう、あなたはそのオブジェクトを持っていなくても大丈夫です。そのような「利用可能なアクションのオブジェクト」を持っているかどうかは、ユースケースに依存します。もしそれが合理的であるとすれば、動詞のパターンは問題ありません。 – Bergi

+0

申し訳ありません、ありがとう、私はそれをもっと調べます。 – VSO

1

実際に行うための一般的なことですが、悪い習慣ではありません。

これは、主にコード分離、またはカスタムコールバックを伴うhttp要求などの一般的な実装を行うために使用されます。

+0

writeSomethingは 'writeSomething'です。私はこれをすばやく書いていました – VSO

関連する問題