署名付きの関数を見てきました
some_fn arg1, arg2, [optional], cb
これはどのように行われますか?
jQuery は常にそのようなことを行います。on
たとえば、次のようになります。
.on( イベント [, セレクター] [, データ], ハンドラー(イベントオブジェクト) )
これが機能する方法は、内部のオプション引数と最後の引数の型が異なるため、関数がどのように呼び出されたかを把握するために(または、 Underscoreのさまざまな関数のように、同様ではあるがより緩いチェックarguments
を使用して) 手動で解析できるようにすることです。可能な引数リストに同じタイプのものが複数ある場合は、長さチェックをミックスに投入して、意図が何であるかを理解しようとします。typeof
is*
例えば:
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'))
デモ: http://jsfiddle.net/ambiguous/c6UwC/
直接...
処理する代わりに、より CoffeeScript っぽいバージョンを使用します。arguments
f = (args...) ->
if(typeof args[0] == 'function')
args[0]()
else
console.log("#{args[0]} is not a function")