概要
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);