Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
Object.seal() は静的メソッドで、オブジェクトを封印します。オブジェクトを封印すると、拡張を抑止し、既存のすべてのプロパティを構成不可にします。封印されたオブジェクトは、固定されたプロパティ一式を持ちます。新しいプロパティを追加したり、既存のプロパティを除去したり、列挙可能性や構成可能性を変更したり、プロトタイプを再割り当てしたりすることはできません。既存のプロパティの値は、書き込み可能である限り変更することができます。 seal() は渡したオブジェクトを返します。
封印するオブジェクトです。
封印されたオブジェクトです。
オブジェクトを封印すると、拡張を抑止し、既存のすべてのプロパティの記述子を configurable: false に変更します。これは、オブジェクトにあるプロパティ一式を固定かつ不変にする効果があります。すべてのプロパティを構成不可にすることで、データプロパティからアクセサプロパティへの変換やその逆を抑制しますが、データプロパティの値の変更は抑制しません。封印されたオブジェクトでプロパティの削除や追加、あるいはデータプロパティからアクセサプロパティへの変換およびその逆をしようとすると、暗黙的に失敗するか、(一般的に厳格モードにおいてですが、それに限らず) TypeError が発生して失敗します。
プライベート要素はプロパティではなく、プロパティ記述子の概念がありません。プライベート要素は、オブジェクトが封印されているかどうかに関わらず、オブジェクトに追加したり除去したりすることはできません。
プロトタイプチェーンには手をつけず、そのままにします。ただし、拡張の抑止の影響により、 [[Prototype]] は再代入できません。
Object.freeze() とは異なり、 Object.seal() で封印されたオブジェクトは、書き込み可能である限り、既存のプロパティを変更することができます。
ES5 では、このメソッドへの引数がオブジェクトではない場合 (プリミティブである場合)、 TypeError になります。 ES2015 では、オブジェクトではない引数は封印された通常のオブジェクトと同様に扱われ、単純にそれを返します。
| ECMAScript® 2027 Language Specification # sec-object.seal |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年8月23日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.