Signatur
Beschreibung
Die Methode toJSON() wandelt ein DOMQuad in ein einfaches Objekt um. Es enthält die Eigenschaften p1, p2, p3 und p4, also die vier Eckpunkte des Vierecks. Jeder Punkt wird beim Serialisieren als Objekt mit x, y, z und w ausgegeben.
Direkt aufrufen musst du die Methode meist nicht. JSON.stringify() ruft toJSON() automatisch auf, sobald ein DOMQuad serialisiert wird. Ohne diese Methode käme bei Plattform-Objekten wie DOMQuad nur {} heraus, weil ihre Eigenschaften als Getter am Prototyp liegen und nicht als eigene Eigenschaften der Instanz.
Typische Einsätze sind das Speichern von Geometrie in localStorage, das Übertragen per postMessage() oder fetch() und das Protokollieren von Transformationsergebnissen. Aus den serialisierten Daten baust du mit DOMQuad.fromQuad() wieder ein vollwertiges DOMQuad.
Rückgabewert
p1, p2, p3 und p4. Jede davon steht für einen Punkt mit x, y, z und w.Beispiele
Viereck direkt serialisieren
const quad = new DOMQuad(
{ x: 0, y: 0 },
{ x: 100, y: 0 },
{ x: 100, y: 50 },
{ x: 0, y: 50 }
);
// JSON.stringify ruft toJSON() automatisch auf
console.log(JSON.stringify(quad.toJSON().p3));
console.log(JSON.stringify(quad));
In localStorage speichern und wiederherstellen
const quad = DOMQuad.fromRect({ x: 10, y: 20, width: 30, height: 40 });
// Speichern
localStorage.setItem('auswahl', JSON.stringify(quad));
// Später wiederherstellen
const daten = JSON.parse(localStorage.getItem('auswahl'));
const wiederhergestellt = DOMQuad.fromQuad(daten);
console.log(wiederhergestellt instanceof DOMQuad);
console.log(wiederhergestellt.p3.x, wiederhergestellt.p3.y);
Transformiertes Viereck an einen Server senden
const rechteck = { x: 0, y: 0, width: 200, height: 100 };
const matrix = new DOMMatrix().rotate(45);
// Eckpunkte einzeln transformieren
const quad = DOMQuad.fromRect(rechteck);
const gedreht = new DOMQuad(
matrix.transformPoint(quad.p1),
matrix.transformPoint(quad.p2),
matrix.transformPoint(quad.p3),
matrix.transformPoint(quad.p4)
);
const senden = async () => {
const antwort = await fetch('/api/geometrie', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ form: gedreht })
});
console.log(antwort.status);
};
senden();
// Wichtig · Fallstricke
- Keine tiefe Kopie in reinen Werten: Je nach Implementierung (Web-IDL-Standard-
toJSON) sindp1–p4im Rückgabeobjekt nochDOMPoint-Instanzen. ErstJSON.stringify()wandelt sie in reine Zahlen-Objekte um. Wenn du garantiert reine Daten brauchst, nimmJSON.parse(JSON.stringify(quad)). - Das Ergebnis ist kein
DOMQuad: Methoden wiegetBounds()fehlen. Die Begrenzungsbox wird auch nicht mitserialisiert. Zum Wiederherstellen nutzt duDOMQuad.fromQuad(). - Nicht-endliche Werte:
NaNundInfinityin Koordinaten werden vonJSON.stringify()zunull. Das Wiederherstellen ergibt dann0oder unerwartete Werte. - Für
postMessage()undstructuredClone()isttoJSON()nicht nötig.DOMQuadist direkt serialisierbar (structured clone). - Kompatibilität: in allen aktuellen Browsern verfügbar, nicht im Internet Explorer. In Node.js gibt es
DOMQuadnicht.