jQuery / JavaScript "dieser" Zeiger Verwirrung
Das Verhalten von "diesem" wenn-Funktion bar
genannt wird, ist unverständlich mir. Siehe code unten. Gibt es eine Möglichkeit, zu veranlassen, "das" werden, um eine einfache alte js-Objekt-Instanz, wenn bar genannt wird, von einem click-handler, statt dem html-element?
//a class with a method
function foo() {
this.bar(); //when called here, "this" is the foo instance
var barf = this.bar;
barf(); //when called here, "this" is the global object
//when called from a click, "this" is the html element
$("#thing").after($("<div>click me</div>").click(barf));
}
foo.prototype.bar = function() {
alert(this);
}
InformationsquelleAutor der Frage I. J. Kennedy | 2009-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Willkommen in der Welt von javascript! 😀
Haben Sie wanderte in das Reich der javascript-Bereich und Schließung.
Für die kurze Antwort:
ausgeführt wird, unter den Anwendungsbereich des foo(als diese bezieht sich auf foo)
ausgeführt wird, die unter dem globalen Geltungsbereich.
diese.bar bedeutet im Grunde:
Ausführung der Funktion hingewiesen.bar unter den Anwendungsbereich der diese (foo).
Wenn Sie kopiert.bar zu barf, und führen Sie barf. Javascript verstanden, führen Sie die Funktion hingewiesen, die durch barf, und da gibt es keine diese, es läuft einfach in den globalen Gültigkeitsbereich.
Um dies zu korrigieren, können Sie ändern
etwas wie dies:
Dieser erzählt, Javascript binden Sie den Umfang der diese auf barf vor der Ausführung.
Jquery-events, die Sie benötigen, um eine anonyme Funktion, oder erweitern Sie die bind-Funktion, die im Prototypen zur Unterstützung der Festlegung des lösungsumfangs.
Weitere Infos:
InformationsquelleAutor der Antwort Aaron Qian
Gibt es eine gute Erklärung auf
this
- Schlüsselwort in JavaScript verfügbar unter QuirksMode.InformationsquelleAutor der Antwort Pawel Krakowiak
Finden Sie vielleicht diese:
Die Steuerung der Wert von "this" in ein jQuery-event
oder so:
http://www.learningjquery.com/2007/08/what-is-this
Nützlich.
InformationsquelleAutor der Antwort Will Dean
Erhalten das Buch: JavaScript: die Guten Teile.
Lesen Sie außerdem, wie viel Sie können von Douglas Crockford
http://www.crockford.com/javascript/
InformationsquelleAutor der Antwort Chris Brandsma
Können Sie verwenden
Function.apply
auf die Funktion zu setzen, wasthis
zu finden:InformationsquelleAutor der Antwort moff
Dies ist, weil diese ist immer die Instanz, die der Funktion zugeordnet ist. Im Falle eines EventHandler-es ist die Klasse, die das Ereignis ausgelöst hat.
Können Sie helfen Sie sich selbst mit einer anonymen Funktion wie diese:
InformationsquelleAutor der Antwort Martin
dieser Kommentar ist falsch, wenn foo ist wie eine normale Funktion, nicht als Konstruktor.
hier:
InformationsquelleAutor der Antwort Boki