2016-11-15 4 views
0

Wenn ich den folgenden Code habe:„this“ ändert Wert auf Klick

function Something() { 
    this.randomElement = $("#element"); 
} 

Something.prototype = { 

    functionOne: function() { 
     console.log("hello"); 
    }, 

    functionTwo: function() { 
     this.randomElement.click(function(e) { 
      this.functionOne(); //this becomes pointed at randomElement 
     }); 
    } 
} 

Wie kann ich schreibe dies in einer sauberen Art und Weise, wo ich würde nicht Something.prototype.functionOne() verwenden muß this.functionOne() innerhalb von FunctionTwo zu ersetzen? Da das Klickereignis den Wert ändert?

Antwort

3

Weil this an das Element gebunden ist, auf das geklickt wird. Sie müssen proxybind

this.randomElement.click(this.functionOne.bind(this)); 

oder jQuery verwenden.

this.randomElement.click($.proxy(this.functionOne, this));