TypeError: can't redefine non-configurable property "x"
Message
TypeError: Cannot modify non-writable property {x} (Edge) TypeError: can't redefine non-configurable property "x" (Firefox) TypeError: Cannot redefine property: "x" (Chrome)
Type d'erreur
Quel est le problème ?
On essaie de redéfinir une propriété alors que celle-ci est non-configurable. L'attribut configurable
permet d'indiquer si la propriété peut être supprimée d'un objet et si ses attributs (en dehors de writable
) peuvent être modifiés. Généralement, les propriétés d'un objet créées avec un initialisateur d'objet sont configurables. Cependant, lorsqu'on utilise la méthode Object.defineProperty()
, la propriété n'est pas configurable par défaut.
Exemples
Propriétés non-configurables créées avec Object.defineProperty()
La méthode Object.defineProperty()
crée des propriétés non-configurables si on n'indique pas le contraire :
var obj = Object.create({});
Object.defineProperty(obj, "toto", { value: "machin" });
Object.defineProperty(obj, "toto", { value: "bidule" });
// TypeError: can't redefine non-configurable property "toto"
Si on veut pouvoir redéfinir la propriété "toto" dans la suite du code, il faudra la créer comme étant configurable.
var obj = Object.create({});
Object.defineProperty(obj, "toto", { value: "machin", configurable: true });
Object.defineProperty(obj, "toto", { value: "bidule", configurable: true });