【问题标题】:Javascript refactor oftenly called functionJavascript 重构常被称为函数
【发布时间】:2012-08-07 11:17:43
【问题描述】:

我使用 javascript 已经很长时间了,但我经常会想出以下代码:

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

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

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

我知道这与 DRY 原则相冲突,但不幸的是,我不知道该怎么做才能消除重复。有人知道答案吗?

【问题讨论】:

  • 您应该将其发布到 codereview.stackexchange.com 并包含实际代码。
  • 谢谢,如果这里没有人回答,我会这样做,尽管我认为 SO 比 codereview 更受欢迎。

标签: refactoring dry javascript


【解决方案1】:

有很多解决方案。

一种方法是包装函数,如“我不是”的答案,

另一个是使用高阶函数。

var end_function = function(callback){

    callback.call();

    // do some stuff 
};

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

end_function(stuff1);
end_function(stuff2);

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 2018-04-01
      • 2011-05-31
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多