javascript - 在 JavaScript 中检查参数的 DRY 方法

标签 javascript

我有两个类似的函数,它们都需要相同的参数检查

function doThis(foo, bar) {
    if (foo.length === 0) foo = 'foo';
    if (bar.length === 0) bar = 'bar';

    foo = encodeURI(foo);
    bar = encodeURI(bar);

    // ... some other checks and enforcements...

    // Output as alert
    alert(foo + bar);
}

function doThat(foo, bar) {
    if (foo.length === 0) foo = 'foo';
    if (bar.length === 0) bar = 'bar';

    foo = encodeURI(foo);
    bar = encodeURI(bar);

    // ... some other checks and enforcements...

    // Output on console
    console.log(foo + bar);
}

什么是干燥的正确方法?我想出了这个:

function paramsCheck(foo, bar) {
    if (foo.length === 0) foo = 'foo';
    if (bar.length === 0) bar = 'bar';

    foo = encodeURI(foo);
    bar = encodeURI(bar);

    // maybe some other checks and enforcements...

    return { foo: foo, bar: bar };
}

function doThis(foo, bar) {
    var params = paramsCheck(foo, bar);

    // Output
    alert(params.foo + params.bar);
}

function doThat(foo, bar) {
    var params = paramsCheck(foo, bar);

    // Output
    console.log(params.foo + params.bar);
}

但我对此并不满意。我宁愿将参数作为对 paramsCheck() 的引用传递,这样我就可以直接修改它们而不是返回新对象。

最佳答案

这可能会起作用,尽管根据你所提供的内容,我会建议这样的事情:

function paramsCheck(params) {
    var l = params.length, i;
    for( i in params) if( params.hasOwnProperty(i)) {
        params[i] = encodeURI(params[i] === 0 ? i : params[i]);
    }
}
function doThis(foo,bar) {
    var params = {foo:foo,bar:bar};
    paramsCheck(params);
    // now do stuff
}

此解决方案更加灵活,因为它不对输入做出假设,因此您可以非常轻松地添加第三个参数。

关于javascript - 在 JavaScript 中检查参数的 DRY 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17338191/

相关文章:

javascript - 简单的可重用的 JavaScripttoggle() 脚本?

javascript - 无法使用 QUnit 的参数化插件

javascript - 更新循环内对象内的变量

javascript - 如何优化采用数组并集的函数类型?

javascript - 在绑定(bind)文本之前添加空格 (knockout.js)

javascript - 如何在 Python 中实现 Selenium HTML5 拖放解决方法

javascript - 如何在 Ajax 上成功提交表单 :

javascript - 带 Node 的简单用户登录验证模块

Javascript 将带有数组字符串键的对象转换为键/名称值的

javascript - 如何将 mvc 方法应用于 Nodejs - Express 应用程序中的 app.js 文件