首页 > 解决方案 > 检查和修改函数默认参数值

问题描述

我有以下功能:

const setDefaults = (func, defArgs) => {
  //should return the func with default arguments modified
  // so that in case that an argument is not passed to the function,
  // but it is provided in default Argument, the default argumnt is used
}

func: 是一个需要从defArgs

defArgs:一组默认参数

例如:

const greet = name => `Hi, ${name}!`

setDefaults(greet, {name: 'friend'})

greet(); // Hi, friend!

到目前为止,我已经开始研究func.toString()并考虑将原始函数修改为字符串,然后评估输出,但这似乎有点冗长,所以我想知道是否有更好的方法来做到这一点。

标签: javascript

解决方案


greet(); // Hi, friend!

您不能修改原始函数,因为它是一个const. 如果你打算做这样的事情:

const greet = name => `Hi, ${name}!`
const parasiticGreet = setDefaults(greet, {name: 'friend'})
parasiticGreet(); // Hi, friend!

这是可能的,但我会像这样简化它:

const greet = name => `Hi, ${name}!`
const setDefaults = (func, defArgs = []) => (...args) => func(...defArgs.map((x, i) => args[i] === undefined ? x : args[i]));
const parasiticGreet = setDefaults(greet, ['friend']);
console.log(parasiticGreet()); // Hi, friend!


推荐阅读