2016-07-09 10 views
0

ich über "this" in JS lerne und ich habe den folgenden Code:warum das Kontextfenster ist, wenn die "dieses" Schlüsselwort in Javascript

var person1 = { 
    firstName: "John", 
    lastName: "Snow", 

    printName: function(){ 
    console.log(this); 
    } 
} 

var person2 = { 
    firstName: "Aria", 
    lastName: "Stark", 

    printName: function(callbackFunction){ 
    console.log(this); 
    callbackFunction(); 
    } 
} 

person1.printName(); 
person2.printName(person1.printName); 

Der Ausgang dieses Codes ist:

person1

person2

Fenster

ich verstehe, warum ich zu den inhaltlichen s person1 und person2 entsprechend, aber warum, wenn ich den Callback rufe, ist der Kontext Fenster und nicht person2?

+0

Da der Wert des 'this' durch bestimmt wird, wie die Funktion aufgerufen wird ..' callbackFunction' daher ohne Kontext global ('window') zurückgegeben ... – Rayon

+0

Hallo Rayon, genannt wird Was ich nicht‘ Ich verstehe, warum kein Kontext? Ich rief "printName" an, wenn Person 2 der Kontext war, also warum, wenn ich die callbackFunction von "printName" aus anrufe, bleibt der Kontext nicht person2? – RiskX

+0

Als ich die Antwort kommentierte - _ "Es ist wichtig, wie sie heißen, nicht wie sie weitergegeben werden ..." _ Verweisen ___ ['this'] (https://developer.mozilla.org/en/docs/Web/ JavaScript/Reference/Operators/this) ___ – Rayon

Antwort

0

callbackFunction In Ihrem Fall ist ein Ausdruck (vom Typ function), der den Kontext basierend darauf verwendet, wie sie aufgerufen werden (Kontext des Fensters, wenn kein Kontext bereitgestellt wird).

Wenn Sie die Methode des person1 aufgerufen werden, dann zwicken sie als

var person1 = { 
 
    firstName: "John", 
 
    lastName: "Snow", 
 

 
    printName: function(){ 
 
    console.log(this); 
 
    } 
 
} 
 

 
var person2 = { 
 
    firstName: "Aria", 
 
    lastName: "Stark", 
 

 
    printName: function(context, callbackFunction){ 
 
    console.log(this); 
 
    callbackFunction.bind(context).call(null); 
 
    } 
 
} 
 

 
person1.printName(); 
 
person2.printName(person1,person1.printName);

Hier bin ich vorbei die context auch, in dem die callbackFunction aufgerufen werden soll.

Und in der Funktion person2.printName binde ich den Kontext an die Callback-Funktion.

+0

Guru - _ "den Kontext zu nehmen, von wo es übergeben wird" _ klingt falsch .. Es ist wichtig, wie sie aufgerufen werden, nicht, wie sie weitergegeben werden ... – Rayon

+0

http://stackoverflow.com/questions/20279484/how -zum-Zugriff-der-richtige-dieser-Kontext-innerhalb-eines-Rückrufs scheint perfekt dupen zu mir .. Wird Flagge, wenn Sie damit einverstanden sind ... – Rayon

+1

@Rayon Sie haben Recht mit beiden Kommentaren – gurvinder372

Verwandte Themen