関するリファレンスを提供するサイトTOPObjectObject.defineProperty()TweetObject.defineProperty()はプロパティの作成時に様々な付加情報を加えることができるメソッドです。指定できる付加情報は値(value)に加えて列挙可能(enumerable)か、削除可能(configurable)か、変更可能(writable)か、さらに、getter/setterの指定が可能なっています。値(value)の設定まずはvalueを設定してみましょう。Object.defineProperty()は第一引数でプロパティを設定したいオブジェクト、第二引数でプロパティ名、第三引数で各種の設定を行います。“bar”という文字列を挿入する処理を記述しています。“foo”;」とプロパティを上書きしているにもかかわらず上書かれていない点でしょう。Object.defineProperty()の各種設定には初期値があり、変更可能(writable)のデフォルト値はfalseになっている為、上書くことができません。ちなみに、valueの初期値はundefinedです。構文で列挙した場合console上に出力されるのは「prop2:bar2」のみです。構文などで列挙することができません。削除可能(configurable)configurableは削除可能かどうかの設定でtrueを指定することでプロパティの削除が可能になります。obj.prop2;console.log(obj.prop2);//undefined変更可能(writable)writableは書き換え可能かどうかの設定でtrueを指定することでプロパティの書き換えが可能になります。"bar2-2";console.log(obj.prop2);//bar2-2setter/getterまた、setter/getterを用いてsetter/getterを介してのみプロパティの制御を可能にすることができます。"bar2";console.log(obj.prop);//bar2setterのみを指定することで書き出し専用、getterのみを指定することで読み込み専用などの区別を付けることができます。複数のプロパティを同時にしたい場合はObject.defineProperties()を利用します。