script-DeepDive(4):オブジェクトをロックする


拡張性プロパティ


オブジェクトの拡張性(拡張性)アトリビュートは、新しいPropertyを追加できるかどうかを決定します.

PreventExtensions


Object.オブジェクトの拡張を防ぐにはpreventExtensionsメソッドを使用します.後悔してはいけない.
const obj = {};

Object.preventExtensions(obj);

try {
	Object.defineProperty(obj, "property1", { value : 42 });
} catch(e) {
	console.log(e);
    // error!!
}

Object.seal


Object.Sealは封止対象と考えられる.ここでいうシールは、Propertyの追加を阻止し、既存のProperty configurable=falseに変更することです.ただし、書き込み可能なプロパティの値は、シール後に変更できます.
const object1 = {
  property1: 42
};

Object.seal(object1);
object1.property1 = 33;
console.log(object1.property1);
// expected output: 33

delete object1.property1; // cannot delete when sealed
console.log(object1.property1);
// expected output: 33

console.log(Object.getOwnPropertyDescriptor(object1,"property1"));
// expected output: Object { value: 33, writable: true, enumerable: true, configurable: false }

Freeze


Object.freezeメソッドはオブジェクトをフリーズします.つまり、対象を変更することはできません.新しい番組を増やしたり、削除を防止したり、価格の変更を防止したりします.つまり、一言で読めるということです.
const obj = {
  prop: 42
};

Object.freeze(obj);

obj.prop = 33;
// Throws an error in strict mode

console.log(obj.prop);
// expected output: 42

console.log(Object.getOwnPropertyDescriptor(obj,"prop"));
// expected output: Object { value: 42, writable: false, enumerable: true, configurable: false }

整理する


片付けてください.

以上です.