2016-07-12 15 views
0

Ich verwende mit Typoskript angular2 und ich habe eine Klasseundefined Funktionsaufruf innerhalb Klasse

export class Example{ 

//.../ 

    const self: all = this; 
    functionToCall(){ 
     //.. Do somerthing 
    } 

    mainFunctionCall(){ 
     somepromise.then(x => self.functionToCall('url/'+ x.name)) 
    } 
} 

definiert Aber es hält Fehler werfen über functionToCall undefiniert ist.

Im ganz neu Typoskript/Winkel @

gibt es eine Regel, dass diese korrekt sein verhindert? Oder was ist der richtige Weg, um die Methode der Klasse in einer anderen Methode aufzurufen?

+0

Warum nicht einfach das Schlüsselwort 'this' verwenden, ohne' self' darauf zu zeigen? Der Typ-Casting von 'all' könnte es vermasseln. – mikkelrd

+0

Dieses Schlüsselwort würde auf den Bereich der Methode verweisen, also würde es nach der Methode functionCall in mainFunctionCall suchen, und das würde zu einem Fehler führen – Darlyn

+0

Das ist nicht der Fall mit js "Klassen". Oder selbst wenn dies ein Objekt wäre, würde "dies" sich auf "Beispiel" beziehen und es wird wie gewünscht funktionieren. – mikkelrd

Antwort

0

Keine Notwendigkeit für einen solchen Hack hier, da Lambda-Funktionen die this Referenz des äußeren Bereichs erfassen. Sie können einfach nur schreiben:

const somepromise = Promise.resolve({name:"noone"}); 

class Example { 

    functionToCall(x : string) { 
     console.log(x); 
    } 

    mainFunctionCall() { 
     somepromise.then(x => this.functionToCall('url/'+ x.name)) 
    } 
} 

(new Example()).mainFunctionCall(); 

bearbeiten Code-Snippet aktualisiert, um alle Details enthalten. Kann in der typescript playground ausgeführt werden.

Verwandte Themen