2016-04-19 14 views
8

Esiste un modo che consenta di chiamare una classe come funzione. Sto cercando di avere la funzionalità qui sotto, dove c'è un metodo main all'interno della classe e quello è quello che voglio che il metodo venga eseguito.Impossibile chiamare una classe come funzione

class test { 
    constructor() { 
    return this.main 
    } 
    main() { 
    return Promise.resolve('thomas') 
    } 
} 

test().then(name => { 
    console.log(name) 
}) 

Sembra che la mia unica altra opzione sarebbe avere una funzione wrapper come questa.

class Test { 
    constructor (name) { 
    this.name = name 
    } 
    main() { 
    return Promise.resolve(this.name) 
    } 
} 

let test = (name) => { 
    return new Test(name).main() 
} 

test('thomas').then(name => { 
    console.log(name) 
}) 
+7

È necessario utilizzare la parola chiave 'new' quando si utilizzano le classi JS. Sono d'accordo che la seconda opzione che hai fornito sarebbe corretta. (o non utilizzare le classi) – evolutionxbox

+2

Una classe costruisce un oggetto. Il tuo costruttore restituirebbe un'altra funzione, non un'istanza della classe. Questo non ha molto senso. Cosa stai cercando di realizzare esattamente qui? Forse un metodo statico sulla classe è quello che stai cercando? –

+0

@FelixKling Mi piacerebbe creare una funzione complessa che ha molti meccanismi interni e chiama riferimenti a se stessa usando 'this.methodName' piuttosto che creare una tonnellata di piccole funzioni. Voglio solo usare quella funzione 'main'. Capisco che non è il miglior uso di una classe, ma posso avere la mia torta e mangiarla anche se la avvolgo come sopra. – ThomasReggi

risposta

6

Utilizzare la parola chiave new quando si utilizzano le classi in JavaScript. Ho avuto un problema simile fino a quando ho aggiunto new prima del nome della classe.

Problemi correlati