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 :

js
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.

js
var obj = Object.create({});
Object.defineProperty(obj, "toto", { value: "machin", configurable: true });
Object.defineProperty(obj, "toto", { value: "bidule", configurable: true });

Voir aussi