Signatur
Beschreibung
Die Methode toJSON() wandelt ein DOMPointReadOnly (oder ein davon abgeleitetes DOMPoint) in ein gewöhnliches JavaScript-Objekt um. Das Ergebnis enthält die vier Koordinaten x, y, z und w als eigene, aufzählbare Eigenschaften.
Nötig ist das, weil die Koordinaten bei DOMPointReadOnly als Getter auf dem Prototyp liegen und keine eigenen Eigenschaften der Instanz sind. Ohne toJSON() würde JSON.stringify() nur {} liefern. Da JSON.stringify() eine vorhandene toJSON()-Methode automatisch aufruft, lassen sich Punkte direkt serialisieren, etwa zum Speichern in localStorage, zum Versand per fetch() oder für Protokollausgaben.
Das zurückgegebene Objekt ist eine unabhängige Momentaufnahme: Ändert man danach ein veränderbares DOMPoint, bleibt das Objekt unverändert. Mit DOMPoint.fromPoint() bzw. DOMPointReadOnly.fromPoint() lässt sich daraus später wieder ein Punkt erzeugen.
Rückgabewert
DOMPointReadOnly) mit den aktuellen Werten der Koordinaten x, y, z und w.Beispiele
Punkt in ein einfaches Objekt umwandeln
const punkt = new DOMPointReadOnly(10, 20, 0, 1);
const obj = punkt.toJSON();
console.log(obj);
console.log(obj instanceof DOMPointReadOnly);
Serialisieren mit JSON.stringify() und Wiederherstellen
const punkt = new DOMPoint(120.5, 48, 0, 1);
// JSON.stringify() ruft toJSON() automatisch auf
const json = JSON.stringify(punkt);
localStorage.setItem('letzterKlick', json);
console.log(json);
// Später: Punkt aus den gespeicherten Daten wiederherstellen
const daten = JSON.parse(localStorage.getItem('letzterKlick'));
const wiederhergestellt = DOMPoint.fromPoint(daten);
console.log(wiederhergestellt.x, wiederhergestellt.y);
Transformierte Mauskoordinaten an einen Server senden
const matrix = new DOMMatrix().translate(50, 25).scale(2);
document.addEventListener('click', async (event) => {
const punkt = new DOMPoint(event.clientX, event.clientY)
.matrixTransform(matrix);
await fetch('/api/klicks', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ zeit: Date.now(), punkt })
});
});
Momentaufnahme eines veränderbaren Punkts
const p = new DOMPoint(1, 2);
const snapshot = p.toJSON();
p.x = 99;
console.log(snapshot.x, p.x);
// Ohne toJSON wären die Koordinaten nicht sichtbar:
console.log(Object.keys(p).length, Object.keys(snapshot));
// Wichtig · Fallstricke
- Kein Punkt-Objekt: Der Rückgabewert hat keine Methoden wie
matrixTransform(). Zum Weiterrechnen mitDOMPoint.fromPoint(obj)wieder einen Punkt erzeugen. - Spread und
Object.assign():{ ...punkt }ergibt{}, weil die Koordinaten Getter auf dem Prototyp sind. Zum Kopierenpunkt.toJSON()verwenden. - Sonderwerte: Enthält eine Koordinate
NaNoderInfinity, lieferttoJSON()diese Werte korrekt,JSON.stringify()macht daraus abernull. structuredClone():DOMPoint-Objekte sind serialisierbar und lassen sich auch perpostMessage()oderstructuredClone()übertragen, ohne den Umweg über JSON.- Kompatibilität: In allen modernen Browsern verfügbar und auch in Web Workern nutzbar. Der Internet Explorer unterstützt die Geometry-Interfaces nicht. In Node.js gibt es
DOMPointnicht von Haus aus.