概要
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]