Wie man mit lokalen Funktionen innerhalb des aufschlussreichen Modulmusters umgeht, die „dies zurückgeben“

StackOverflow https://stackoverflow.com//questions/12691636

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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top