0

私はかなり長い間JavaScriptを使用していますが、次のコードを思いつくことがよくあります。

function1 () {
  // do stuff
  ...
  end_function();
}

function2 () {
  // do stuff
  ...
  end_function();
}

function3 () {
  // do stuff
  ...
  end_function();
}

これが DRY の原則と矛盾していることはわかっていますが、残念ながら、繰り返しを削除するためにどうすればよいかわかりません。誰も答えを知っていますか?

4

2 に答える 2

2

非常に多くの解決策があります。

1つの方法は、「私はそうではありません」という回答のようなラップ機能です。

もう 1 つは高階関数を使用することです。

var end_function = function(callback){

    callback.call();

    // do some stuff 
};

var stuff1 = function(){};
var stuff2 = function(){}:

end_function(stuff1);
end_function(stuff2);
于 2012-08-07T12:10:18.343 に答える
1

end_function他の関数に直接コーディングすると、DRY と競合します。最終的には、独自の関数に抽象化したコードを呼び出すための構文必要です。

関数がオブジェクトにグループ化されている場合、オブジェクトのプロパティを列挙し、各関数をラップできると思いますが、これらの関数が多数ある場合にのみ価値があります。

var funcs = {
    function1 () {
      // do stuff
    },
    function2 () {
      // do stuff
    },
    function3 () {
      // do stuff
    }
};

Object.keys(funcs).forEach(function(key) {
    var orig = funcs[key];
    funcs[key] = function() {
        orig.apply(this, arguments);
        end_function();
    };
});
于 2012-08-07T11:42:06.030 に答える