A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/WeakRef below:

WeakRef - JavaScript | MDN

WeakRef

Baseline Widely available *

Ein WeakRef-Objekt ermöglicht es Ihnen, einen schwachen Verweis auf ein anderes Objekt zu halten, ohne zu verhindern, dass dieses Objekt vom Garbage Collector eingesammelt wird.

Beschreibung

Ein WeakRef-Objekt enthält einen schwachen Verweis auf ein Objekt, das als sein Ziel oder Referent bezeichnet wird. Ein schwacher Verweis auf ein Objekt ist ein Verweis, der nicht verhindert, dass das Objekt vom Garbage Collector zurückgefordert wird. Im Gegensatz dazu hält ein normaler (oder starker) Verweis ein Objekt im Speicher. Wenn ein Objekt keine starken Verweise mehr auf sich hat, kann der Garbage Collector der JavaScript-Engine das Objekt zerstören und seinen Speicher wieder freigeben. In diesem Fall kann nicht mehr auf das Objekt über einen schwachen Verweis zugegriffen werden.

Da auch nicht registrierte Symbole vom Garbage Collector eingesammelt werden können, können sie ebenfalls als Ziel eines WeakRef-Objekts verwendet werden. Der Anwendungsfall hierfür ist jedoch begrenzt.

Vermeidung nach Möglichkeit

Der korrekte Einsatz von WeakRef erfordert sorgfältige Überlegung und sollte nach Möglichkeit vermieden werden. Es ist auch wichtig, sich nicht auf irgendwelche Verhaltensweisen zu verlassen, die nicht von der Spezifikation garantiert werden. Wann, wie und ob die Garbage Collection erfolgt, hängt von der Implementierung der jeweiligen JavaScript-Engine ab. Ein Verhalten, das Sie in einer Engine beobachten, kann in einer anderen Engine, in einer anderen Version derselben Engine oder sogar in einer leicht unterschiedlichen Situation mit derselben Version der Engine anders sein. Die Garbage Collection ist ein schwieriges Problem, das von den Entwicklern der JavaScript-Engines ständig verfeinert und verbessert wird.

Hier sind einige spezielle Punkte, die von den Autoren im Vorschlag enthalten sind, der WeakRef eingeführt hat:

Garbage Collector sind kompliziert. Wenn eine Anwendung oder Bibliothek darauf angewiesen ist, dass der GC einen WeakRef oder einen Finalizer [Aufräum-Callback] zeitnah und vorhersehbar aufräumt, wird sie wahrscheinlich enttäuscht sein: Die Bereinigung kann viel später als erwartet erfolgen oder überhaupt nicht. Quellen der Variabilität umfassen:

Anmerkungen zu WeakRefs Konstruktor
WeakRef()

Erstellt ein neues WeakRef-Objekt.

Instanz-Eigenschaften

Diese Eigenschaften sind auf WeakRef.prototype definiert und werden von allen WeakRef-Instanzen geteilt.

WeakRef.prototype.constructor Optional

Die Konstruktionsfunktion, die das Instanzobjekt erstellt hat. Für WeakRef-Instanzen ist der Anfangswert der WeakRef-Konstruktor.

Hinweis: Diese Eigenschaft ist in der Spezifikation als "normativ optional" gekennzeichnet, was bedeutet, dass eine konforme Implementierung die constructor-Eigenschaft möglicherweise nicht offenlegt. Dies verhindert, dass beliebiger Code den WeakRef-Konstruktor erhält und die Garbage Collection beobachtet. Allerdings enthüllen alle großen Engines sie standardmäßig.

WeakRef.prototype[Symbol.toStringTag]

Der Anfangswert der [Symbol.toStringTag]-Eigenschaft ist der String "WeakRef". Diese Eigenschaft wird in Object.prototype.toString() verwendet.

Instanz-Methoden
WeakRef.prototype.deref()

Gibt das Zielobjekt des WeakRef-Objekts oder undefined zurück, wenn das Zielobjekt zurückgefordert wurde.

Beispiele Verwendung eines WeakRef-Objekts

Dieses Beispiel startet einen Zähler, der in einem DOM-Element angezeigt wird und anhält, wenn das Element nicht mehr existiert:

class Counter {
  constructor(element) {
    // Remember a weak reference to the DOM element
    this.ref = new WeakRef(element);
    this.start();
  }

  start() {
    if (this.timer) {
      return;
    }

    this.count = 0;

    const tick = () => {
      // Get the element from the weak reference, if it still exists
      const element = this.ref.deref();
      if (element) {
        element.textContent = ++this.count;
      } else {
        // The element doesn't exist anymore
        console.log("The element is gone.");
        this.stop();
        this.ref = null;
      }
    };

    tick();
    this.timer = setInterval(tick, 1000);
  }

  stop() {
    if (this.timer) {
      clearInterval(this.timer);
      this.timer = 0;
    }
  }
}

const counter = new Counter(document.getElementById("counter"));
setTimeout(() => {
  document.getElementById("counter").remove();
}, 5000);
Spezifikationen Browser-Kompatibilität Siehe auch

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4