2016-12-22 1 views
0

Ich habe eine Reihe von Ereignissen, die ich höre (nicht DOM), und ein Objekt, das Ereignishandlerfunktionen enthält.JavaScript voreingestellter Funktionsparameter

Normalerweise würde ich so etwas wie

whenEventOccurs('event-name', handler.eventName)

Außer tun, dass ich einen Parameter an die Prozedur zu übergeben, die für jedes Ereignis Zuhörer ändert.

Ich bin auf der Suche nach etwas wie Function.prototype.bind(), die this nicht setzt, aber legt den ersten Parameter, wenn möglich.

Wenn es keine saubere Lösung ist, kann ich folgende immer tun, aber ich möchte es vermeiden, wenn möglich:

whenEventOccurs('event-name', function(foo, bar, baz){ 
    handler.eventName(specialParam, foo, bar, baz); 
}); 
+0

Sie können eine Funktion mit den erforderlichen Bindungen zurückgeben – Rajesh

Antwort

2

Sie es in einer Funktion kapseln können, die ähnlich wie bind()

arbeiten
function bindArg1(func, arg1) { 
    return function() { 
     var args = [].slice.call(arguments); 
     args.unshift(arg1); 
     return func.apply(this, args); 
    } 
} 

whenEventOccurs('event-name', bindArg1(handler.eventName, specialParam)) 
+0

Wie würde ich andere Parameter als den speziellen Parameter übergeben? – Tobsta

+0

Auch der 'this'-Bereich ist dann unmöglich zu verwenden, was bedeutet, dass ich keine anderen Dinge in' handler' referenzieren kann. – Tobsta

+0

Wenn Sie andere Parameter übergeben, verwenden Sie einfach den Code, den Sie in der Frage geschrieben haben. – Barmar

Verwandte Themen