2017-12-11 2 views
0

Ich möchte einen Logging-Decorator rund um die jQuery-Funktion erstellen, der aber nur einmal aufgerufen wird (in der Initialisierungszeit). Wie man es repariert? Bitte schauen Sie sich den Code an.JQuery-Funktionen überschreiben (Logging-Decorator)

function makeLogging(f) { 

    function wrapper(...rest) { 
     console.log(f.name); 
     console.log(rest); 
     return f.apply(this, rest); 
    } 

    return wrapper; 
} 

const task = $('.task'); 

task.on = makeLogging(task.on); 

task.on('click',() => console.log('hi')); 

Das Click-Ereignis zeigt keine Meldungen über die aufgerufene Funktion an.

+0

Verwenden '$ (Task) .auf (...)' –

+0

I '$ (Aufgabe) .auf (...) verwenden,' aber ich brauche diese Funktion wickeln auf dem Logging Decorator. Ich brauche Informationen, dass diese Funktion aufgerufen wurde, mit welchen Argumenten es aufgerufen wurde und auf welchem ​​Selektor. Dies ist nicht unbedingt eine Funktion "on", aber es ist definitiv die jQuery-Funktionen – AZawalar

Antwort

0

Codebeispiel der Antwort

function makeLogging(f) { 

    function auxiliaryWrapper(x, rest) { 
    return() => { 
     console.log(f.name); 
     console.log(rest); 
     x(); 
    } 
    } 

    function mainWrapper(...rest) { 
     const restWithWrap = rest.map(arg => { 
     if (typeof arg === 'function') { 
      return auxiliaryWrapper(arg,rest); 
     } 
     return arg; 
     }); 
     console.log(restWithWrap); 
     return f.apply(this, restWithWrap); 
    } 

    return mainWrapper; 
} 

const task = $('.task'); 

task.on = makeLogging(task.on); 

task.on('click',() => console.log('hi')); 
1

Sie tun es ein bisschen falsch, wenn ich die Idee erwischt, was Sie erreichen wollen. Für Funktionalität, beschrieben Sie, versuchen Sie folgendes:

task.on('click', makeLogging(() => console.log('hi'))); 

In Ihrem ursprünglichen Code, wickelte Sie die Funktionalität on() Funktion, aber diese on() Funktion wird nicht als Event-Handler genannt - es ist nur tatsächliche Ereignishandler installieren. Aus diesem Grund wird die Protokollierung nur einmal während der Installation des Handlers aufgerufen.

+0

Ich möchte über tatsächlichen Ereignishandler wissen ('on 'etc) Informationen. Jedes Mal, wenn diese Funktion aufgerufen wird, benötige ich alle Informationen zum Aufruf. – AZawalar

+0

Ok, aber 'on' etc. sind keine eigentlichen Event-Handler. In Ihrem Fall ist '() => console.log ('hi')' der eigentliche Event-Handler. Deshalb wird Ihr Decorator nur einmal aufgerufen - Sie haben den Decorator für die 'on'-Funktion installiert und diese Funktion wurde wirklich nur einmal aufgerufen, wenn Sie' task.on ('click',() => console.log ('hi')); 'Befehl. –

+0

Ja, ich habe es gestern verstanden und gelöst. Jetzt habe ich den bearbeiteten Code. Danke für die Hilfe – AZawalar