这是我的代码:
function function1() {
var ids = GetIds(); // predefined function
if (ids.length === 0) {
alert("Please select at least one item to procees.");
return;
}
...
}
function function2() {
var ids = GetIds(); // predefined function
if (ids.length === 0) {
alert("Please select at least one item to procees.");
return;
}
...
}
function function3() {
var ids = GetIds(); // predefined function
if (ids.length === 0) {
alert("Please select at least one item to procees.");
return;
}
...
}
如何提取公共部分?如何重新考虑代码?退货声明很难处理。是否有任何与重新考虑此代码有关的模式?
提前致谢!
if (ids.length === 0) {
alert("Please select at least one item to procees.");
return;
}
答案 0 :(得分:2)
这非常适合decorator pattern。
function decorateGetId(f) {
return function () {
var ids = GetIds();
if (ids.length === 0) {
alert("Please select at least one item to process.");
return;
} else {
return f(ids);
}
};
}
然后
function function1(ids) {
// ...
}
function1 = decorateGetId(function1);
或我的偏好,因为函数语句在吊装时会发生奇怪的事情。
var function2 = decorateGetId(function (ids) {
// function 2 body ...
});
答案 1 :(得分:0)
你做不到。您唯一能做的就是将alert()
移到GetIds()
。但是,在这种情况下,函数名称会有点混乱。
var ids = GetIds();
if(!ids) return;
或者你可以改变它:
GetIds(function(ids) {
});
您的GetIds
功能会看起来像像这样:
function GetIds(callback) {
var ids = ....;
if(!ids) alert('...');
else callback(ids);
}
答案 2 :(得分:0)
你可以尝试:
function checkId(ids) {
if (ids.length === 0) {
alert("Please select at least one item to procees.");
return false;
}
return true;
}
function function1() {
var ids = GetIds();
if (!checkId(ids)) return;
// More code here
}