0

这是我的代码:

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

    ...
}

如何提取公共部分?如何重构代码?return 语句很难处理。是否有任何与重构此代码有关的模式?

提前致谢!

    if (ids.length === 0) {
        alert("Please select at least one item to procees.");
        return;
    }
4

3 回答 3

2

这非常适合装饰器模式

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 ...
});
于 2012-07-13T07:51:14.883 回答
0

你不能。你唯一能做的就是移动alert()GetIds(). 但是,在这种情况下,函数名称会有点混乱。

var ids = GetIds();
if(!ids) return;

或者你可以像这样改变它:

GetIds(function(ids) {

});

您的GetIds函数将如下所示:

function GetIds(callback) {
    var ids = ....;
    if(!ids) alert('...');
    else callback(ids);
}
于 2012-05-02T14:16:42.393 回答
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
} 
于 2012-05-02T14:18:34.517 回答