我正在使用javascript很长一段时间,但我经常遇到以下代码:
function1 () {
// do stuff
...
end_function();
}
function2 () {
// do stuff
...
end_function();
}
function3 () {
// do stuff
...
end_function();
}
我知道这与DRY原则有冲突,但不幸的是,我不知道如何处理它以消除重复。有谁知道答案?
答案 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();
};
});