Wie man mit lokalen Funktionen innerhalb des aufschlussreichen Modulmusters umgeht, die „dies zurückgeben“
-
12-12-2019 - |
Frage
Mir gefällt das aufschlussreiche Modulmuster.Ich werde private Funktionen haben, die ich öffentlich machen und zurückgeben möchte.Aber ich habe möglicherweise auch einige lokale Funktionen in meinem aufschlussreichen Modulmuster, die „dies zurückgeben“ ...
var player = function(){
//my local variable scope...
oplayer.damage = function(){
if(!this.grace){
this.shield--;
if (this.shield == 0){
return this;
}
}
};
...
return {
damage : oplayer.damage
}
}();
Ist es in Ordnung, „dies zurückzugeben“, wenn ich ausdrücklich etwas zurücksende?(im Zusammenhang mit der Verwendung des aufschlussreichen Modulmusters).Wenn nicht, wie kann ich meine lokale Funktion oplayer.damage so umwandeln, dass sie in einem richtigen Kontext verwendet werden kann?Vielen Dank für jeden Rat!Ich versuche nur, mich mit dem ganzen „Gib das zurück“-Konzept auseinanderzusetzen.
Lösung
Es sollte in Ordnung sein, denn "dieses" ist mit der Ausführung kontextabhängig.Da Sie dies in einer öffentlichen Funktion zurücksenden, die Teil des "Cutdown-Objekts ist, erhalten Sie nur das Abgeordnetenobjekt.Ich denke also, was Sie tun wollen, sollte in Ordnung sein, wenn Sie die folgenden Szenarien in Betracht ziehen:
generasacodicetagpre.Andere Tipps
Bitte prüfen Sie zunächst, was das ist this
Schlüsselwort ist, es gibt ein Gute Einführung bei MDN.
Ist es in Ordnung, „dies zurückzugeben“, wenn ich ausdrücklich etwas zurücksende?
Ja natürlich.Dies ist das Standardmuster für die Verkettbarkeit von Methoden – alles gibt das Objekt zurück, für das es aufgerufen wurde.Um sich jedoch darauf verlassen zu können, müsste man es in jedem Fall zurückgeben, nicht nur, wenn die Schilde heruntergefallen sind.
Wenn dies nicht Ihr Ziel war, verwenden Sie einfach ein normales return;
Aussage (ergibt undefined
sozusagen keine Return-Anweisung).
im Zusammenhang mit der Verwendung des aufschlussreichen Modulmusters
Es spielt absolut keine Rolle, wo Sie diese Funktion definiert haben.
Meine Funktion so umwandeln, dass sie in einem richtigen Kontext verwendet werden kann?
(Ich gehe davon aus, dass mit „Kontext„Sie beziehen sich auf die this
Objekt hier)
Man kann den Wert nicht wirklich schätzen this
hängt immer vom Aufruf der Funktion ab.Natürlich könntest du .bind()
die Funktion zu Ihrem player
Objekt oder einfach direkt nur zurückgeben player
anstatt this
.