JavaScriptでは、オブジェクトの拡張可能なプロパティを使用して、オブジェクトに新しいプロパティを動的に追加できるかどうかを示します。 ECMAScript 3標準では、すべてのオブジェクトが拡張可能です。 ECMAScript 5標準では、すべてのオブジェクトはデフォルトで拡張可能ですが、このプロパティは設定によって変更できます。
オブジェクトが拡張可能かどうかを確認するには、Object.isextensible()ステートメントを使用できます。
コードコピーは次のとおりです。
var o = {x:1};
console.log(object.isextensible(o)); // true
拡張できないオブジェクトを作成するには、object.preventextensions()ステートメントを使用できます。
コードコピーは次のとおりです。
object.preventextensions(o)
console.log(object.isextensible(o)); // false
object.preventextensions()の逆操作ステートメントがないため、オブジェクトが非拡張に設定されると、再び拡張するために設定する方法がないことは注目に値します。
object.preventextensions()ステートメントの範囲はオブジェクト自体であり、プロトタイプオブジェクトは影響を受けません。オブジェクトが非拡張不可に設定されている場合、プロパティはプロトタイプオブジェクトに動的に追加でき、これらの動的に追加されたプロパティはオブジェクトによって引き継がれます。
object.seal()およびobject.freeze()
object.preventextensions()は、新しいプロパティがオブジェクトに動的に追加されるのを防ぎます。この操作に加えて、javaScriptにはオブジェクトを保護するための2つの厳しい操作があります:object.seal()とobject.freeze()。
object.seal()の関数は、すべてのオブジェクトの設定可能なプロパティを、object.preventextensions()に基づいてfalseに設定することです。 object.preventextensions()操作と同様に、object.seal()には操作がないため、オブジェクトをシールすると復元できません。 JavaScriptでは、object.issealed()を使用して、オブジェクトがシールされているかどうかを照会できます。
object.freeze()の関数は、すべてのオブジェクトのプロパティをobject.seal()に基づいて読み取り専用として設定することです。 object.seal()およびobject.preventextensions()操作のように、object.freeze()には操作がないため、オブジェクトを冷凍すると復元できません。 JavaScriptでは、object.isfrozen()を使用して、オブジェクトがフリーズされたかどうかを照会できます。
コードコピーは次のとおりです。
console.log(object.issaled(o)); // false
object.seal(o);
console.log(object.issaled(o)); // true
console.log(object.isfrozen(o)); // false
object.freeze(o);
console.log(object.isfrozen(o)); // true
object.preventextensions()、object.seal()、object.freeze()であるかどうかにかかわらず、その範囲のアクションはオブジェクト自体であり、オブジェクトのプロトタイプオブジェクトは影響を受けません。