2017-06-21 182 views
0

我是Typescript的新用户,并开始使用它来玩Ionic。我来自Java背景,我习惯了它的语法和做事方式,遇到了一些麻烦。专门创建新的对象实例并使其初始化。Instantiate typescript class

最近我遇到了这个我无法解释的问题。我发送了一个HTTP GET请求,并在JavascriptObject中得到响应。

要使用此响应工作,我试图映射此JavascriptObject我收到一个typescript类矿井我把它叫做HttpResponse,创造它的一个新实例,当我收到的响应。为了让事情变得更容易,我创建了一个简单的小提琴来解释我的问题。

你可以找到快速写入小提琴on this link

正如你可以在输出中看到,对象数据是存在的,但是当我调用HttpResponse它只是创建一个空的实例,它包含了什么,我不不明白为什么它这样做。

任何帮助表示赞赏!下面的代码:

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(); 

回答

0

在你HttpResponse类的构造函数,你是不是设置类与传递的参数性能。您可以通过在参数中使用public限定符来完成此操作。

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

查看最新的Fiddle

或者,您可以在您的class中声明属性,并在构造函数中设置它们,如this.data = data;赋值。

+0

哼哼声明构造函数的参数,是的,这是有道理的......我很困惑,你可以直接在构造函数中声明属性,但现在我清楚地看到,你必须指定可见性修饰符(无论是公有的还是私有的)。现在想想看,我看到我只是在构造函数中指定了普通参数,并且不会自动将它们转换为类属性......很高兴你帮我看到了! – JorgeGRC

0

因为您的HttpResponse实际上没有任何属性。你只有构造函数参数,没有别的。如果你想自动构造函数参数转换为属性,你可以这么用parameter properties做:

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

谢谢你的回答Saravana,我只因为他先回答就接受了jaibatrik。非常感谢您的帮助,从更高的角度来看,我发现我只声明了构造函数params,我忙于考虑这个“快捷方式”特性,以在构造函数中声明类成员,最终陷入了初学者的错误(: – JorgeGRC

0

您必须使用预选赛即privatepublicprotected

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