javascript - 检查和修改函数默认参数值
问题描述
我有以下功能:
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()
并考虑将原始函数修改为字符串,然后评估输出,但这似乎有点冗长,所以我想知道是否有更好的方法来做到这一点。
解决方案
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!
推荐阅读
- c# - 如何将 json 对象反序列化为 json 字符串?
- microservices - Nestjs:如何处理客户端存在的微服务MessagePattern
- php - 在 HTML 页面中显示的 ng-repeat 中返回的“字段”总和
- c# - ASP.NET Core 3.1 Web API:它可以作为带有 https 的 Windows 服务自托管并使用像 IIS 这样的证书吗?
- python - 如何在熊猫组上应用窗口案例功能
- javascript - 在 React 中,为什么子组件的渲染函数会被调用两次?
- sql - 根据过滤后的表 2 更新表 1 列
- django - Django Admin - 如何(自动)将数据添加到相关表中,然后可用于过滤结果?
- html - 如何使子元素高于子元素z-index?
- jsonnet - Jsonnet 库中的复杂验证