2017-03-01 5 views
0

Dies ist das Beispiel:Wie ruft man die Klassenfunktion in einem statischen Objekt auf?

export class cls1{ 
    str1:string; 

    constructor(s:string){ 
    this.str1 = s; 
    } 

    func1(){ 
    return "hello " + this.str1; 
    } 
} 

export class AppComponent { 

static obj2:cls1= JSON.parse(`{"str1":"efgh"}`); 

AppComponent.obj2.func1(); // func1 is not a function 
} 

Das Problem ist das Funktionselement in dem statischen Objekt nicht vertraut ist. Ich bekomme Fehler: func1 ist keine Funktion

+0

Ich bin kein eckiger Experte, aber obj2 scheint hier ein Fall zu sein, so dass Sie die Methode nicht nennen können. versuchen Sie cls1.func1() – Dexion

+0

Danke, aber cls1 ist nicht statisch, so dass jedes Mal, wenn es eine Instanz gibt es nicht existiert. – yoram

Antwort

0

Was genau möchten Sie hier tun? Das sieht nicht nach einem Anwendungsfall aus, an den ich denken könnte. Oder rummst du nur herum und probierst Sachen mit Maschinenschrift? Wie würde eine Funktion magisch von einem JSON.parse Anruf erscheinen, der gerade ein Objekt enthält :)?

Anyways, in der Nähe kann ich komme mit dieser Funktion zum Laufen zu bringen ist, indem Sie den Code zu diesem Wechsel:

class cls1{ 
    str1:string; 

    constructor(s:string){ 
    this.str1 = s; 
    } 

    func1(){ 
    alert(this.str1); 
    } 
} 

class AppComponent { 

    static obj2:cls1= new cls1(JSON.parse('{"str1":"efgh"}').str1); 
} 

AppComponent.obj2.func1(); // alert: 'efgh' 

jsFiddle

Lassen Sie sich die Art der Programmierung Fehler jetzt ignorieren, und sein auf Ihr Weg :)

+0

Danke, die JSON.parse ist zum Beispiel jast. Ich habe ein wirklich großes statisches Objekt hat eine Menge von Mitgliedern und Funktionen, und ich würde gerne die Funktion auf die Werte der bestehenden Mitglieder – yoram

+0

Und Ihr Code akzeptiert Fehler: (SystemJS) cls1 ist kein Konstruktor. – yoram

+0

@yoram Ich habe meine Antwort aktualisiert – PierreDuc

Verwandte Themen