2016-09-12 1 views
-1

Wenn ich eine Funktion wie diesWie öffne ich das auf ein beliebiges Objekt in jquery?

function foo(a) { 
    $(this).html(a); 
} 

var r = $("#hello"); 

und ich kann nicht die Funktion foo ändern, was kann ich tun foo mit r zu nennen, so dass innerhalb foo wird this auf das von r ausgewählten Objekt verweisen ?

ich versucht, dieses

r.each(function(i, x) { 
    foo(1); 
}); 

aber es hat nicht funktioniert. Die this bezog sich auf das window Objekt.

+0

sollte in der Lage sein zu tun 'foo.call (r)' . –

+0

Was ist mit der Weitergabe zusätzlicher Parameter? – omega

+0

'r.each' wird immer nur über ein Element laufen. jQuery findet den ersten nur, weil ids eindeutig sein müssen – baao

Antwort

4

Das liegt daran, dass this auf das globale Objekt (oder undefined) gesetzt wird, wenn der Funktionsbereich zuvor gebunden wurde, wenn Sie eine Funktion selbst aufrufen.

Um die Funktion so, wie Sie wollen verwenden, schreiben Sie es wie folgt aus:

r.each(foo); 

, dass die Funktion direkt und gewährleisten this passieren wird auf den gleichen Wert gesetzt, wie es, wenn der Körper von foo sein würde, war innerhalb Ihrer anonymen Funktion.

Wenn Sie zusätzliche Parameter foo übergeben wollen, die von each nicht übergeben werden, werden Sie es nennen haben call oder apply mit:

r.each(function() { 
    foo.call(this, 1); 
}); 
+0

Können Sie Unterstützung für Parameter einschließen? – omega

+0

@omega Gerade bearbeitet, um zu zeigen, wie das geht. –

+0

Ich denke CORY hat eine gute Lösung. – omega

Verwandte Themen