2016-04-19 17 views
8

Czy jest jakiś sposób, który pozwoli mi na wywołanie klasy jako funkcji. Chcę mieć funkcjonalność poniżej, gdzie istnieje metoda main w klasie i to jest ta, którą chcę wykonać metodę.Nie można wywołać klasy jako funkcji

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

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

Wygląda na to, że moją jedyną opcją byłoby posiadanie takiej funkcji.

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

Musisz użyć słowa kluczowego 'new' podczas używania klas JS. Zgadzam się, że druga opcja, którą podałeś, byłaby poprawna. (lub nie używaj klas) – evolutionxbox

+2

Klasa tworzy obiekt. Twój konstruktor zwróci inną funkcję, a nie instancję klasy. To nie ma większego sensu. Co dokładnie próbujesz osiągnąć tutaj? Może szukana jest statyczna metoda na zajęciach? –

+0

@FelixKling Chciałbym utworzyć złożoną funkcję, która ma wiele wewnętrznych działań i odwołuje się do siebie używając 'this.methodName' zamiast tworzyć mnóstwo małych funkcji. Chcę tylko użyć tej jednej funkcji "głównej". Rozumiem, że nie jest to najlepszy użytek z klasy, ale mogę też zjeść ciastko i je zjeść, jeśli zawinę to jak wyżej. – ThomasReggi

Odpowiedz

6

Użyj słowa kluczowego new podczas zajęć z JavaScript. Miałem podobny problem, zanim dodałem new przed nazwą klasy.

Powiązane problemy