我有两个类似的函数,它们都需要相同的参数检查
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/