Javascript重构通常称为函数

时间:2012-08-07 11:17:44

标签: refactoring dry javascript

我正在使用javascript很长一段时间,但我经常遇到以下代码:

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

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

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

我知道这与DRY原则有冲突,但不幸的是,我不知道如何处理它以消除重复。有谁知道答案?

2 个答案:

答案 0 :(得分:2)

有很多解决方案。

一种方式是包装功能,如“我不是我的”答案,

另一种是使用高阶函数。

var end_function = function(callback){

    callback.call();

    // do some stuff 
};

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

end_function(stuff1);
end_function(stuff2);

答案 1 :(得分:1)

如果您将end_function直接编码到其他功能中,则会与DRY冲突。最终,您需要一些语法来调用您抽象到自己的函数中的代码。

如果函数被组合成一个Object,我想你可以枚举对象的属性,并包装每个函数,但这可能只值得你拥有许多这些函数。

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();
    };
});