オブジェクトの不変性とは、オブジェクトの作成後 (オブジェクトを読み取り専用型に設定する)、オブジェクトを一切変更したくないことを意味します。
車のオブジェクトを定義し、プロジェクト全体でそのプロパティを使用して操作を実行する必要があるとします。データが誤って変更されることは許されません。
const myTesla = { maxSpeed: 155, batteryLife: 300, weight: 2300 };
Object.preventExtensions() 拡張機能の防止
このメソッドは、既存のオブジェクトに新しいプロパティを追加できません。preventExtensions() は元に戻せない操作であり、追加のプロパティを追加することはできません。オブジェクトに。
Object.isExtensible(myTesla); // true Object.preventExtensions(myTesla); Object.isExtensible(myTesla); // false myTesla.color = 'blue'; console.log(myTesla.color) // undefined
Object.seal() seal
属性の追加または削除を防ぐことができます。seal() は属性記述子の変更も防ぐことができます。
Object.isSealed(myTesla); // false Object.seal(myTesla); Object.isSealed(myTesla); // true myTesla.color = 'blue'; console.log(myTesla.color); // undefined delete myTesla.batteryLife; // false console.log(myTesla.batteryLife); // 300 Object.defineProperty(myTesla, 'batteryLife'); // TypeError: Cannot redefine property: batteryLife
Object.freeze() Freeze
これは Object.seal() と同じ効果があり、プロパティを書き込み不能にします。
Object.isFrozen(myTesla); // false Object.freeze(myTesla); Object.isFrozen(myTesla); // true myTesla.color = 'blue'; console.log(myTesla.color); // undefined delete myTesla.batteryLife; console.log(myTesla.batteryLife); // 300 Object.defineProperty(myTesla, 'batteryLife'); // TypeError: Cannot redefine property: batteryLife myTesla.batteryLife = 400; console.log(myTesla.batteryLife); // 300
注: 不変オブジェクトを変更しようとしたときにエラーをスローしたい場合は、厳密モードを使用してください。
推奨チュートリアル: js 入門チュートリアル
以上がjsで不変オブジェクトを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。