Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。
Object.seal() は静的メソッドで、オブジェクトを封印します。オブジェクトを封印すると、拡張を抑止し、既存のすべてのプロパティを構成不可にします。封印されたオブジェクトは、固定されたプロパティ一式を持ちます。新しいプロパティを追加したり、既存のプロパティを除去したり、列挙可能性や構成可能性を変更したり、プロトタイプを再割り当てしたりすることはできません。既存のプロパティの値は、書き込み可能である限り変更することができます。 seal() は渡したオブジェクトを返します。
封印するオブジェクトです。
封印されたオブジェクトです。
オブジェクトを封印すると、拡張を抑止し、既存のすべてのプロパティの記述子を configurable: false に変更します。これは、オブジェクトにあるプロパティ一式を固定かつ不変にする効果があります。すべてのプロパティを構成不可にすることで、データプロパティからアクセサプロパティへの変換やその逆を抑制しますが、データプロパティの値の変更は抑制しません。封印されたオブジェクトでプロパティの削除や追加、あるいはデータプロパティからアクセサプロパティへの変換およびその逆をしようとすると、暗黙的に失敗するか、(一般的に厳格モードにおいてですが、それに限らず) TypeError が発生して失敗します。
プライベート要素はプロパティではなく、プロパティ記述子の概念がありません。プライベート要素は、オブジェクトが封印されているかどうかに関わらず、オブジェクトに追加したり除去したりすることはできません。
プロトタイプチェーンには手をつけず、そのままにします。ただし、拡張の抑止の影響により、 [[Prototype]] は再代入できません。
Object.freeze() とは異なり、 Object.seal() で封印されたオブジェクトは、書き込み可能である限り、既存のプロパティを変更することができます。
ES5 では、このメソッドへの引数がオブジェクトではない場合 (プリミティブである場合)、 TypeError になります。 ES2015 では、オブジェクトではない引数は封印された通常のオブジェクトと同様に扱われ、単純にそれを返します。
| ECMAScript® 2027 Language Specification # sec-object.seal |
ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。
より良いインターネットのための青写真。
このコンテンツの一部は、©1998–2026 個人の mozilla.org 協力者です。コンテンツはクリエイティブ・コモンズ・ライセンスのもとで利用できます。