javascript

プロパティ列挙不可

概要

javascriptでプロパティを定義する際に、列挙不可にする方法です。
次のような書き方はenumerableの属性が全てのオブジェクトに継承されます。
[js]
Object.defineProperty(Object.prototype, "TestId", {
writable : false,
enumerable: false,
configurable: false
});
[/js]

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

になります。

簡単なサンプルコードを書いて動作テストしてみます。
[js]
Object.defineProperty(Object.prototype, "TestId", {
value : 1,
writable : true,
enumerable: false,
configurable: false
});

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

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

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

出力結果は
[js]
1
2
[/js]

となります。

次にこのTestIdに対して、以下のコードを書いてみます。
[js]
for (let check_value in TestId) {
console.log(check_value);
}
[/js]
enumerable属性を無指定であれば、デフォルトはtrueなので、ログ出力の内容が確認できますが、上記の例の場合はfalseなのでログ出力はされずエラーにもなりません。

また、次のように記述しても同様の動きになります。
[js]
Object.keys(TestId);
[/js]

コメントを残す

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