💔

Object.difinePropertyが色々と強力すぎる件

に公開

はじめに

たまたま出会ったObject.difinePropertyが中々に、強すぎたので紹介していきます.

Object.difineProperty

javascriptの標準組み込みオブジェクトのObjectのメソッドの一つになります.
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

簡単なサンプルコードを書いていきたいと思います.

const obj = {}
obj.entity = 10
Object.difineProperty(obj, 'entity', {
    value: 15,
    writable: false
});
obj.entity = 10;
console.log(obj.entity) # 15

最初に10を代入しましたが、再度15Object.difineProperty()にて代入しました.
その時の設定にて、writable: falseを設定したので、
通常のobj.entity = 10;では値が更新できなくなったのです!!!!!!

そもそも使い所あるの??

現状のES6ではあんましないと思います.
ただし、ES5ではclassがないので上記の方法を使うとオブジェクトに入れた関数や値を簡単には変更できないです.

簡単に変更できないので、既存のコードでの使用はバグを引き起こしかねないので注意が必要ですね...

最後に

若かりし時の前の会社でIE対応をしないといけないためjavascriptのコードにてクラスを使えないと言うジレンマがありましたが、この方法を使ってもいけたなと再実感しました.
ライブラリのコードリーディングを進めると自分では思いつかないコードや書かないコードに出くわせるので時間はかかりますが非常に楽しい側面があります.
皆様も是非、挑戦してみてください!!!!

Discussion