1

署名付きの関数を見てきました

some_fn arg1, arg2, [optional], cb

これはどのように行われますか?

4

1 に答える 1

2

jQuery は常にそのようなことを行います。onたとえば、次のようになります。

.on( イベント [, セレクター] [, データ], ハンドラー(イベントオブジェクト) )

これが機能する方法は、内部のオプション引数と最後の引数の型が異なるため、関数がどのように呼び出されたかを把握するために(または、 Underscoreのさまざまな関数のように、同様ではあるがより緩いチェックargumentsを使用して) 手動で解析できるようにすることです。可能な引数リストに同じタイプのものが複数ある場合は、長さチェックをミックスに投入して、意図が何であるかを理解しようとします。typeofis*

例えば:

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")

デモ: http://jsfiddle.net/ambiguous/gPmJZ/

于 2013-06-13T19:01:48.217 に答える