Warum ändert sich eine "Methode" einer Methode, wenn eine Referenz auf die Methode eines Objekts aufgerufen wird?

7
%Vor%

Warum tut genderTeller (); Warnungen undefined ist mir nicht klar. Wenn ich es sehe, glaube ich, dass es nur eine Linie darüber ist. Kann jemand bitte die Details erklären

    
sushil bharwani 05.10.2011, 06:46
quelle

3 Antworten

14

Wenn Sie eine Variable wie diese zuweisen ...

%Vor%

... Sie verlieren den -Kontext des person1 -Objekts, und die this der Funktion zeigt auf das globale Objekt ( window in einem Browser) anstelle des instanziierten person1 Objekt.

Sie erhalten undefined , weil die gender -Eigenschaft nicht auf window existiert, und das Verweisen auf eine undefinierte Eigenschaft eines Objekts gibt undefined in JavaScript zurück.

Das können Sie in modernen Browsern mit bind() ... %Vor%

... oder jQuery hat eine Methode namens proxy() .

%Vor%     
alex 05.10.2011, 06:50
quelle
5

So funktioniert der JavaScript-Bereich. Ich denke, das folgende Beispiel wird Ihnen einen guten Einblick geben.

%Vor%

Es gibt eine einfache Möglichkeit herauszufinden, was der Wert von this in einer Funktion ist, die Sie aufrufen. Es ist normalerweise der object vor dem dot , wo Sie die Funktion aufgerufen haben. Zum Beispiel:

person1.sayGender() hier this = person1

object1.object2.foo() hier this = object2

genderTeller() here this = window , weil Sie es nicht von einem Objekt aus aufrufen.

Natürlich können Sie den Wert von this mit .call oder .apply function setzen, aber normalerweise befolge ich diese Regel, wenn ich ein mentales Modell für meinen Code erstelle.

    
Rifat 05.10.2011 06:54
quelle
3

Sie rufen die Funktion ohne den Kontext ihres Objekts auf, so dass this das globale Objekt window ist, also alarmiert die Funktion den Wert von window.gender , was undefined ist.

    
Guffa 05.10.2011 06:51
quelle

Tags und Links