2017-05-29 2 views
0

Gibt es eine Möglichkeit, die Klasse this bei der Eingabe einer Klick-Funktion von einer Schaltfläche zu halten?Keeping Klasse beim Aufrufen der Schaltfläche Klick-Funktion

Zum Beispiel:

class MyClass extends FooClass{ 

    constructor (obj) { 

    super (obj) 

    this.obj= obj; 

    $("#someButton").click(this.foo); 
    } 

    foo(){ 
    this.obj; // undefined because this is now #someButton and not MyClass 
    } 

Aber ich will this.obj in foo() zuzugreifen.

Antwort

5

Sie benötigen foo

$("#someButton").click(this.foo.bind(this)); 

oder benutzen Pfeil Funktion

$("#someButton").click(() => this.foo()); 
+0

Das hat es getan. Gibt es einen Unterschied zwischen den beiden Ansätzen? Der zweite ruft nur die Funktion auf? Warum sollte '() => this.foo' dann nicht funktionieren? – shinzou

+1

'bind' erstellt eine neue Funktion mit begrenztem Kontext, die ES5 ist, um den Kontext in Rückrufen zu halten. '() => blah' erstellt neue Pfeilfunktion und wurde in ES201Somthing eingeführt. Sie sind in einigen Aspekten unterschiedlich, aber in diesem Fall sollte "das gleiche" funktionieren. Https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions "Warum sollte nicht'() => this.foo' Arbeit dann? " '() => body' erstellt eine neue Pfeilfunktion' this.foo', die einfach auf 'foo' w/o call zugreift. Also brauchst du 'this.foo()' –

-1

Warum binden, werden Sie nicht einen Parameter für die Funktion foo definieren:

$("#someButton").click(function(){ 
 
    foo(obj); 
 
}); 
 

 

 
foo(obj){ 
 
    // work with obj ... 
 
}

+1

Wie würde er auf 'foo' zugreifen? –

Verwandte Themen