我一直看到有签名的功能
some_fn arg1, arg2, [optional], cb
这是怎么做到的?
答案 0 :(得分:2)
jQuery一直在做这类事情,on
for example:
.on(events [,selector] [,data],handler(eventObject))
它的工作方式是内部可选参数和最终参数具有不同的类型,因此函数可以使用arguments
手动解析typeof
(或类似但更松散的检查,如各种{{3 })弄清楚它是如何被调用的。如果可能的参数列表中存在多个相同类型的内容,那么您将在混合中进行长度检查以尝试找出其意图。
例如:
f = () ->
args = Array::slice.apply(arguments)
if(typeof args[0] == 'function')
args[0]()
else
console.log("#{args[0]} is not a function")
f(1, 2, 3)
f(-> console.log('pancakes'))
演示:is*
functions in Underscore
更多CoffeeScript-ish版本将使用...
而不是直接处理arguments
:
f = (args...) ->
if(typeof args[0] == 'function')
args[0]()
else
console.log("#{args[0]} is not a function")