TypeError: kann Prototyp nicht setzen: würde einen Prototyp-Kettenzyklus verursachen

Der JavaScript-Ausnahmefehler "TypeError: kann Prototyp nicht setzen: würde einen Prototyp-Kettenzyklus verursachen" tritt auf, wenn das Prototyp eines Objekts so gesetzt wird, dass die Prototyp-Kette zirkulär wird (a und b haben jeweils den anderen in ihren Prototyp-Ketten).

Nachricht

TypeError: Cyclic __proto__ value (V8-based)
TypeError: can't set prototype: it would cause a prototype chain cycle (Firefox)
TypeError: cyclic __proto__ value (Safari)

Fehlertyp

Was ist schiefgelaufen?

Ein Zyklus, auch Schleife genannt, wurde in eine Prototyp-Kette eingeführt. Das bedeutet, dass beim Durchlaufen dieser Prototyp-Kette derselbe Ort immer wieder aufgerufen würde, anstatt schließlich null zu erreichen.

Dieser Fehler wird beim Setzen des Prototyps ausgelöst. In einer Operation wie Object.setPrototypeOf(a, b) wird dieser Fehler ausgegeben, wenn a bereits in der Prototyp-Kette von b existiert.

Beispiele

js
const a = {};
Object.setPrototypeOf(a, a);
// TypeError: can't set prototype: it would cause a prototype chain cycle
js
const a = {};
const b = {};
const c = {};
Object.setPrototypeOf(a, b);
Object.setPrototypeOf(b, c);
Object.setPrototypeOf(c, a);
// TypeError: can't set prototype: it would cause a prototype chain cycle

Siehe auch