Gibt es einen besseren Weg, um einen äußeren Umfang dies in Javascript zu verweisen?

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

  •  07-07-2019
  •  | 
  •  

Frage

Ich habe wie dies viele Javascript Methoden gesehen und geschrieben in letzter Zeit:

var myObj = {
  dialogOptions: {...},
  init: function() {
    var $this = this;
    var something = $("<div/>").load("...", null, function() {
      $(this).dialog($this.dialogOptions);
    });
  }
}

Jetzt funktioniert dies aufgrund der Art der Verschlüsse, aber die benannte Variable Verweis auf die jeweilige Höhe und der Umfang scheint umständlich. Meine Frage lautet:

Gibt es einen JavaScript-Operator, der auf dem inneren Umfang var $this = this; führt? Oder vielleicht ist es eine Möglichkeit, die Objekthierarchie zu durchqueren, die Immobilie zu erhalten suche ich im inneren Umfang?

War es hilfreich?

Lösung

Kurze Antwort:. Nö

Lange Antwort: das „Problem“ ist die einzigartige Natur der this in einer Sprache, in der alles ein Objekt ist. Sie können nicht wählen, und wählen über, wenn dies bedeutet, das diese oder bedeutet die andere diese.

Das ist Javascript für Sie. Sie können sehr viel tun, aber es ist nicht immer schön.

Andere Tipps

Es gibt keine bestimmte Art und Weise, dies zu vermeiden. Allerdings bieten einige Bibliotheken eine Möglichkeit, Funktionen auf bestimmte Bereiche zu binden - in der Regel erlaubt Syntax wie folgt:

(function() { /* do something */ }).bind(whatever)

Je nach Geschmack kann dies sauberer als den Umfang in einer separaten Variable deklariert. Was die Bindung in dem obigen Zusammenhang ist, ist im Wesentlichen so aus:

Function.prototype.bind = function(scope) {
    var thisFunction = this;
    return function() {
        thisFunction.call(scope);
    };
};

In diesem Fall, wenn myObj eine globale (oder global erreichbar) variabel ist, kann ich oft folgendes:

var myObj = {
  dialogOptions: {...},
  init: function() {
    var something = $("<div/>").load("...", null, function() {
      $(this).dialog(myObj.dialogOptions);
    });
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top