2017-06-21 2 views
0

Ich bin neu in Typescript und begann damit zu spielen mit Ionic. Ich komme aus einer Java Hintergrund und ich habe einige Probleme, sich an die Syntax und die Art der Dinge zu tun. Speziell neue Objektinstanzen erstellen und initialisieren.Instanziieren Typoskript Klasse

Kürzlich stieß ich auf dieses Problem, das ich nicht erklären kann. Ich sende eine HTTP-GET-Anfrage und bekomme ihre Antwort in einer JavascriptObject.

mit dieser Antwort zu umgehen, ich versuche diesen JavascriptObject ich zu einer typescript Klasse von mir empfangen kartieren, die ich HttpResponse genannt, eine neue Instanz davon zu schaffen, wenn ich die Antwort erhalten. Um die Dinge leichter zu machen, habe ich eine einfache Geige erschaffen, die mein Problem illustriert.

Sie können die schnell geschrieben Geigeon this link

Wie man auf den Ausgang sehen finden, ist Objektdaten dort, aber wenn ich die HttpResponse aufrufen es schafft nur eine leere Instanz, es nichts enthält, und ich don verstehe nicht, warum es so ist.

Jede Hilfe wird geschätzt! Hier ist der Code:

class HttpResponse { 
    constructor(status: number = 0, 
    data: string = '', 
    headers: Object = '', 
    error: string = ''){} 
} 


    class Page { 

     response: HttpResponse; 

     retrieveData(): void { 
     document.body.innerHTML += 'inside retrieveData()<br>'; 
     let data = { 
      status: 200, data: "this is some fake data", 
      headers: { foo: 'foo', bar: 'bar', baz: 'baz' } 
     } 
     document.body.innerHTML +='Data: ' + JSON.stringify(data) + '<br>'; 
     this.response = new HttpResponse(data.status, data.data, data.headers); 
     document.body.innerHTML += JSON.stringify(this.response); 

     } 

    } 

new Page().retrieveData(); 

Antwort

0

im Konstruktor Ihrer HttpResponse Klasse, Sie setzen nicht die Eigenschaften der Klasse mit den übergebenen Argumenten. Dazu können Sie den Parameter public in den Parametern verwenden.

class HttpResponse { 
    constructor(public status: number = 0, 
    public data: string = '', 
    public headers: Object = '', 
    public error: string = ''){ } 
} 

Siehe die aktualisierte Fiddle.

Alternativ können Sie die Eigenschaften in Ihrem class deklarieren und sie im Konstruktor wie this.data = data; Zuordnungen festlegen.

+0

Brummen, ja, Das macht Sinn ... Ich war verwirrt darüber, dass man Eigenschaften direkt im Konstruktor deklarieren konnte, aber jetzt sehe ich klar, dass man den Sichtbarkeitsmodifikator (entweder öffentlich oder privat, denke ich) spezifizieren muss, damit das funktioniert. Wenn ich jetzt darüber nachdenke, sehe ich, dass ich nur normale Parameter im Konstruktor angegeben habe und sie nicht automatisch in Klasseneigenschaften umgewandelt habe ... froh, dass du mir geholfen hast, das zu sehen! – JorgeGRC

0

Weil Ihre HttpResponse eigentlich keine Eigenschaften hat. Sie haben nur Konstruktorparameter und sonst nichts. Wenn Sie automatisch möchten Ihre Konstruktorparameter in Eigenschaften umwandeln, können Sie dies tun, indem parameter properties mit:

class HttpResponse { 
    constructor(
    public status: number = 0, 
    public data: string = '', 
    public headers: Object = '', 
    public error: string = ''){} 
} 
+0

Danke für deine Antwort Saravana, ich habe Jaibatrik akzeptiert, nur weil er zuerst geantwortet hat. Vielen Dank für die Hilfe, aus einer höheren Perspektive gesehen Ich sehe, dass ich nur Konstruktorparameter deklarierte, ich war so beschäftigt, über diese "Abkürzungs" -Funktion zu denken, um Klassenmitglieder im Konstruktor zu deklarieren, die ich schließlich in einem Anfängerfehler fand (: – JorgeGRC

0

Sie haben müssen Konstruktorparameter erklären mit Qualifier dh privatepublicprotected

class HttpResponse { 
    constructor(
    private status: number = 0, 
    private data: string = '', 
    private headers: Object = '', 
    private error: string = ''){} 
} 
Verwandte Themen