Mam tę klasę, która wykonuje wewnętrzne wywołanie metody statycznej:
export class GeneralHelper extends BaseHelper{
static is(env){
return config.get('env:name') === env;
}
static isProd(){
return GeneralHelper.is('prod');
}
}
Czy są jakieś słowa kluczowe, których mogę użyć do zastąpienia nazwy klasy w poniższym wierszu:
GeneralHelper.is('prod');
W PHP istnieje self
, static
itd. Czy ES6 dostarczyć coś podobnego do nich?
TY.
javascript
oop
ecmascript-6
Shlomi
źródło
źródło
Odpowiedzi:
jeśli wywołujesz funkcję statyczną z wnętrza instancji, właściwym sposobem odniesienia się do funkcji statycznej klasy jest:
this.constructor.functionName();
es6 wywołuje metody statyczne
źródło
this.constructor.is('prod')
zgłosiłby błąd w tym przypadku.this.method()
. Również kiedy przedłużasz zajęcia, dzwoniszsuper.method()
To to samo, co wywołanie metody na zwykłym obiekcie . Jeśli wywołasz
GeneralHelper.isProd()
metodę,GeneralHelper
będzie dostępna tak jakthis
w metodzie, więc możesz użyćclass GeneralHelper { static is(env) { … } static isProd(){ return this.is('prod'); } }
To jednak nie zadziała, gdy metoda jest przekazywana jako funkcja zwrotna, tak jak zwykle . Ponadto może to różnić się od
GeneralHelper
jawnego dostępu, gdy ktoś dziedziczyisProd
po twojej klasie i nadpisujeis
,InheritedHelper.isProd()
przyniesie inne wyniki.Jeśli chcesz wywołać metody statyczne z metod instancji, zobacz tutaj . Zauważ również, że klasa, która definiuje tylko metody statyczne, jest dziwaczna, możesz zamiast tego użyć zwykłego obiektu.
źródło
this
zachowuje. Nie działa jakthis
w innych językach.this
nie można go używać przed wywołaniem super).constructor(){ CLASS_NAME.STATIC_METHOD(); }
Obie odpowiedzi tutaj są poprawne i dobre, ale chciałem dorzucić dodatkowe szczegóły w oparciu o tytuł tego pytania.
Kiedy zobaczyłem „ES6 - wywołanie metody statycznej w klasie” brzmiało to jak „wywołanie metody statycznej (z metody niestatycznej) w klasie”. Nie definiuj szczegółów, o co zadaje pytanie początkowe pytanie.
Ale dla każdego, kto chce wiedzieć, jak wywołać metodę statyczną z metody niestatycznej w klasie, możesz to zrobić w następujący sposób:
class MyClass { myNonStaticMethod () { console.log("I'm not static.") MyClass.myStaticMethod() } static myStaticMethod () { console.log("hey, I'm static!") } } MyClass.myStaticMethod() // will log "hey, I'm static!" const me = new MyClass() me.myNonStaticMethod() // will log "I'm not static" and then "hey, I'm static!"
Chodzi o to, że metodę statyczną można wywołać bez tworzenia nowej instancji klasy. Oznacza to, że możesz wywołać go wewnątrz metody instancji w taki sam sposób, jak wywołujesz ją poza instancją.
Ponownie, wiem, że nie o to chodziło w tym pytaniu, ale może to być pomocne dla innych osób.
źródło