MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

TypeError: can't define property "x": "obj" is not extensible

メッセージ

TypeError: can't define property "x": "obj" is not extensible (Firefox)
TypeError: Cannot define property: "x", object is not extensible. (Chrome)

エラータイプ

TypeError

何がうまくいかなかったのか?

通常、オブジェクトは拡張可能で、新しいプロパティを追加できます。しかしこの場合は、Object.preventExtensions() がオブジェクトをもはや拡張できないものに設定しているため、拡張不可のマークが付けられたときにあったプロパティ以上のプロパティを追加できません。

strict モードでは、拡張不可のオブジェクトに新しいプロパティを追加しようとすると TypeError をスローします。非 strict モードでは、"x" プロパティの追加は暗黙的に無視されます。

'use strict';

var obj = {};
Object.preventExtensions(obj);

obj.x = 'foo';
// TypeError: can't define property "x": "obj" is not extensible

strict モードと非 strict モード共に、拡張不可のオブジェクトに新しいプロパティを追加しようとして Object.defineProperty() を呼び出すと、例外をスローします。

var obj = { }; 
Object.preventExtensions(obj); 

Object.defineProperty(obj, 
  'x', { value: "foo" }
);
// TypeError: can't define property "x": "obj" is not extensible

このエラーを修正するには、Object.preventExtensions() の呼び出しを削除するか、オブジェクトが拡張不可とマークされる前にプロパティを追加するように移動する必要があります。もちろん、必要がないのであれば、追加しようとしているプロパティを削除しても良いです。

'use strict'; 

var obj = {}; 
obj.x = 'foo'; // add property first and only then prevent extensions

Object.preventExtensions(obj);

関連項目

ドキュメントのタグと貢献者

 このページの貢献者: YuichiNukiyama
 最終更新者: YuichiNukiyama,