TypeError: can't set prototype: it would cause a prototype chain cycle

Die JavaScript-Ausnahme "TypeError: can't set prototype: it would cause a prototype chain cycle" tritt auf, wenn das Prototyp eines Objekts so eingestellt wird, dass die Prototypenkette zyklisch wird (a und b haben sich gegenseitig in ihren Prototypketten).

Meldung

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?

In einer Prototypenkette wurde ein Schleife, auch Zyklus genannt, eingeführt. Das bedeutet, dass beim Durchlaufen dieser Prototypenkette immer wieder derselbe Punkt erreicht würde, anstatt schließlich null zu erreichen.

Dieser Fehler wird beim Setzen des Prototyps ausgelöst. Bei einem Vorgang wie Object.setPrototypeOf(a, b), wenn a bereits in der Prototypenkette von b existiert, wird dieser Fehler ausgelöst.

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