特别是在 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 的字符串和函数” - 以优雅的方式进行字符串参数?”。
最佳答案
这是一个简单的实现方法:
api = {
// "public" function
func: function(a) {
if (typeof a == 'function') {
a = a();
}
// rest of function
}
}
关于javascript - 设计接受字符串或函数的 JavaScript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14212220/