Ich habe diese Klasse, die einen internen Aufruf einer statischen Methode ausführt:
export class GeneralHelper extends BaseHelper{
static is(env){
return config.get('env:name') === env;
}
static isProd(){
return GeneralHelper.is('prod');
}
}
Gibt es Schlüsselwörter, mit denen ich den Klassennamen in der folgenden Zeile ersetzen kann:
GeneralHelper.is('prod');
In PHP gibt es self
, static
usw. alles bieten Does ES6 ähnlich wie diese?
TY.
javascript
oop
ecmascript-6
Shlomi
quelle
quelle
Antworten:
Wenn Sie die statische Funktion innerhalb einer Instanz aufrufen, können Sie wie folgt auf die statische Klassenfunktion verweisen:
this.constructor.functionName();
es6 ruft statische Methoden auf
quelle
this.constructor.is('prod')
würde in diesem Fall Fehler werfen.this.method()
. Auch wenn Sie eine Klasse erweitern, rufen Sie ansuper.method()
Es ist dasselbe wie das Aufrufen einer Methode für ein gewöhnliches Objekt . Wenn Sie die
GeneralHelper.isProd()
Methode aufrufen , ist dieGeneralHelper
wiethis
in der Methode verfügbar , sodass Sie sie verwenden könnenclass GeneralHelper { static is(env) { … } static isProd(){ return this.is('prod'); } }
Dies funktioniert jedoch nicht, wenn die Methode wie gewohnt als Rückruffunktion weitergegeben wird . Es kann sich auch vom
GeneralHelper
expliziten Zugriff unterscheiden, wenn jemandisProd
von Ihrer Klasse erbt und überschreibtis
undInheritedHelper.isProd()
andere Ergebnisse erzielt.Wenn Sie statische Methoden von Instanzmethoden aufrufen möchten, lesen Sie hier . Beachten Sie auch, dass eine Klasse, die nur statische Methoden definiert, eine Sonderklasse ist. Möglicherweise möchten Sie stattdessen ein einfaches Objekt verwenden.
quelle
this
sich das Verhalten verhält. Es funktioniert nicht wiethis
in anderen Sprachen.this
, dass er vor dem Superaufruf nicht verwendet werden kann).constructor(){ CLASS_NAME.STATIC_METHOD(); }
Beide Antworten hier sind richtig und gut, aber ich wollte basierend auf diesem Fragentitel ein zusätzliches Detail hinzufügen.
Als ich "ES6 - Statische Methode innerhalb einer Klasse aufrufen" sah, klang es wie "eine statische Methode (von einer nicht statischen Methode) innerhalb einer Klasse aufrufen". Definieren Sie nicht, was der ursprüngliche Fragesteller im Detail stellt.
Aber für alle, die wissen möchten, wie eine statische Methode von einer nicht statischen Methode innerhalb einer Klasse aufgerufen wird, können Sie dies folgendermaßen tun:
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!"
Die Idee ist, dass die statische Methode aufgerufen werden kann, ohne eine neue Instanz der Klasse zu erstellen. Das heißt, Sie können es innerhalb der Methode einer Instanz genauso aufrufen, wie Sie es außerhalb der Instanz aufrufen würden.
Wiederum weiß ich, dass dies nicht das Detail der Frage war, aber dies könnte anderen Menschen helfen.
quelle