このページで実行済みのコード

var obj = {};

// obj.foo を定義する
Object.defineProperty(obj, 'foo', {
  value: 'bar',       // 初期値
  writable: false,    // 書き込み不可
  enumerable: false,  // 列挙されない
  configurable: false // 再定義不可
});
    

開発コンソールで以下のコードを実行して結果を確認してみてください

// obj.foo は書き込み不可
> obj.foo = 'baz';
"baz"
> obj.foo;
"bar"

// obj.foo は列挙されない
> Object.keys(obj);
[]

// 設定に関わらずすべてのプロパティを列挙する
> Object.getOwnPropertyNames(obj);
["foo"]

// obj.foo は再定義不可
> delete obj.foo;
false
> obj.foo;
"bar"
> Object.defineProperty(obj, 'foo', { configurable: true });
TypeError: Cannot redefine property: foo

// 現在のディスクリプタを確認する
> Object.getOwnPropertyDescriptor(obj, 'foo');
Object {value: "bar", writable: false, enumerable: false, configurable: false}