.preventExtensions()

以降、新しいプロパティがオブジェクトへ追加されることを防ぎます。

文法

Object.preventExtensions(obj)
引数 説明
obj 拡張不可(non-extensible)にするオブジェクトを指定します。

新しいプロパティが追加出来る場合、オブジェクトは拡張可能です。 preventExtensionsはオブジェクトはもはや拡張可能では無いという印付けを行うため、 拡張不可にされた時に持っていたプロパティ以外のプロパティを持つことは出来ません。 拡張不可のオブジェクトのプロパティは、一般的に削除は可能であることに注意してください。 拡張不可のオブジェクトに新しいプロパティを追加しようとすると失敗し、 それは沈黙的に行われるか、 またはTypeErrorをスロー(一般的に、strictモードの場合に)します。

Object.preventExtensionsが防ぐのは、自身のプロパティの追加のみです。 オブジェクトのprototypeのプロパティであれば追加することが出来ます。 ただし、オブジェクト上でのObject.preventExtensionsの呼び出しは、 その__proto__(非推奨)プロパティの拡張も防ぎいます。

ECMAScript 5では、拡張可能なオブジェクトを拡張不可に変える方法はあっても、 その逆を行う方法はありません。

説明

// Object.preventExtensionsは、
// 拡張可能にしたオブジェクトを返します。
var obj = {};
var obj2 = Object.preventExtensions(obj);
assert(obj === obj2);

// オブジェクトはデフォルトでは、拡張可能です。
var empty = {};
assert(Object.isExtensible(empty) === true);

// ...しかし、それは変更可能です。
Object.preventExtensions(empty);
assert(Object.isExtensible(empty) === false);

// Object.definePropertyは、拡張不可のオブジェクトへ新しいプロパティを追加すると、
// エラーをスローします。
var nonExtensible = { removable: true };
Object.preventExtensions(nonExtensible);
Object.defineProperty(nonExtensible, "new", { value: 8675309 }); // TypeErrorをスロー

// strictモードでは、拡張不可のオブジェクトへ新しいプロパティの追加を試みると、
// TypeErrorをスローします。
function fail()
{
  "use strict";
  nonExtensible.newProperty = "FAIL"; // TypeErrorをスロー
}
fail();

// 拡張機能:(__proto__をサポートしたエンジンでのみ動作
// (Object.getPrototypeOfの代わりに使用することは、非推奨です。):
// 拡張不可のオブジェクトのprototypeは、変更出来なくなります。)
var fixed = Object.preventExtensions({});
fixed.__proto__ = { oh: "hai" }; // TypeErrorをスロー

仕様

ブラウザ互換性

デスクトップ
機能 Chrome Firefox
(Gecko)
IE Opera Safari
基本 6 4.0 (2.0) 9 12.1 5.1
モバイル
機能 Android Firefox
Mobile
IE
Mobile
Opera
Mobile
Safari
Mobile
基本 ? ? ? ? ?

Based on Kangax's compat table.

関連項目

 Back to top

© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
  • 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
  • MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。