0

我使用 javascript 已经很长时间了,但我经常遇到以下代码:

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

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

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

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

4

2 回答 2

2

有很多解决方案。

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

另一个是使用高阶函数。

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 回答