プロパティ列挙不可

javascript

概要

javascriptでプロパティを定義する際に、列挙不可にする方法です。
次のような書き方はenumerableの属性が全てのオブジェクトに継承されます。

Object.defineProperty(Object.prototype, "TestId", {
    writable : false,
    enumerable: false,
    configurable: false
});

上記のコードは定義のみをしているので、何も出力(動作)はしません。
各パラメータの意味は
writable:値の変更可否
enumerable:列挙可否
configurable:再定義可否

になります。

簡単なサンプルコードを書いて動作テストしてみます。

Object.defineProperty(Object.prototype, "TestId", {
	value : 1,
	writable : true,
	enumerable: false,
	configurable: false
});

//初期状態を呼び出しして内容を確認
console.log(TestId); //出力結果 1

//異なる値を代入してみる
TestId = 2;

console.log(TestId); //出力結果 2

出力結果は

1
2

となります。

次にこのTestIdに対して、以下のコードを書いてみます。

for (let check_value in TestId) {
    console.log(check_value);
}

enumerable属性を無指定であれば、デフォルトはtrueなので、ログ出力の内容が確認できますが、上記の例の場合はfalseなのでログ出力はされずエラーにもなりません。

また、次のように記述しても同様の動きになります。

Object.keys(TestId);

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です