特别是在 Javascript 中,API 公开接受字符串或特定参数函数的函数是很常见的。字符串提供“已经初始化”的值,而函数在运行时产生值。
// Call foo with known value
api.foo('bar')
// or defer value determination to run-time
api.foo(function() { return 'bar'; }
这更灵活,有时传递给这些 API 调用的参数直到运行时才知道,例如
api.foo(function() { return prompt('foo or bar ?'); });
这种方法在某种程度上保留给面向公众的函数(因为它们引入了更复杂的签名并且可能有陷阱 - 最好保持它们的数量低),但是,编写这样的函数有什么好的习惯用法?
类似的东西
api = {
// "public" function
func: function(a) {
if (typeof(a) == 'function')
return this._func(a());
else
return this._func(a);
},
// Actual implementation
_func: function(a) {
[...]
}
}
应该可以,但肯定有更有效/更优雅的选择。有任何想法吗 ?
更新:在@camus 的评论之后(以及一个现在已经消失但相关的答案),这里有一个更新澄清了我的意图并解释了这与 API 的关系
考虑到在编写函数时,我们不知道要以哪种方式调用它,并且我们不想对其进行限制性假设。该函数被设计为通用的,因此可以使用不同的签名多次调用它。我们可以强制调用者使用字符串,但是让一个返回字符串的函数来完成这项工作会很方便。这个函数可以传递额外的参数(比如一个索引,...),这当然是非常特定于 API 的上下文,但一般的想法是“我如何处理字符串和函数-返回-a - 以优雅的方式字符串参数?”。