2015-09-13 4 views
22

Ich möchte eine Funktion aufrufen können, in der .then Umfang und für die ich benutze die this.foo() Weise. Aber wenn ich dies innerhalb der . Dann bekomme ich einen Fehler, da dieser scheint verloren zu sein. Was kann ich tun?JavaScript aktivieren, verspricht, wie Variable für den Zugriff auf diese in einem dann Umfang

In diesem Code dies äquivalent wäre, die gleiche Leistung für das Objekt haben dieses

console.log(this) 
one().then(function() { 
    console.log(this) 
}) 

function one() { 
    var deferred = $q.defer(); 
    deferred.resolve() 
    return deferred.promise; 
} 

Dies scheint weder

console.log(this) 
var a = this; 
one().then(function(a) { 
    console.log(a) 
}) 
+2

Wenn Sie das 'a' Argument von' on() entfernen Sie dann (function (a) { 'so, dass es' eine(), dann (function() {.. Dann gebe ich Ihnen das Ergebnis, das Sie wollen. – Andy

+0

Ja, ich habe es gerade getestet, als ich Ihre Antwort gesehen habe. Sie haben völlig Recht! Ich werde es als eine Antwort markieren, wenn Sie es als Antwort posten – Gerard

Antwort

30

Ihr zweites Codebeispiel zu arbeiten, ist der richtige Weg gehen. Da sich der Bereich in der neuen Funktion ändert, ändert sich auch this, so dass Sie einen Bezug auf this außerhalb der Funktion haben.

Der Grund, warum es fehlgeschlagen ist, weil die Funktion a verwendet, die Sie in die Funktion statt die globale a übergeben, die Sie außerhalb definiert haben.

Mit anderen Worten:

var a = this; 
one().then(function() { 
    console.log(a) 
}); 
+24

oder ... 'one(). then (function() { console.log (this) } .bind (this))' _licher Haftungsausschluss, dass Internet-Exploder vor 9 ist eine Verschwendung von Speicherplatz und sollte nie verlassen werden etwas anderes als statische Webseiten anzeigen zu lassen_ –

+2

Yeah, @JaromandaX, ich war j Wenn man über den Schnitt schaut, macht jemand die Antwort und der Code sieht nicht richtig aus. Dein sieht genau aus. – Andy

+2

Ihre ist richtig, und wahrscheinlich einfacher zu verwenden in vielen Fällen, wissen Sie nur, indem Sie schauen, wo Sie 'var a = this 'genau was' a/this' sein wird - wohingegen, mit bind, es möglicherweise nicht genau was du bist erwarten oder wollen für diese Angelegenheit: p –