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