Object.defineProperty 可能大家不是很常用到,但其實它無所不在,甚至於許多 mvvm, mvc 的資料繫結都是透過此接口達成的. 像是以下這段簡單的 code 其實就等價於 可以發現 object.defineProperty 有幾個可設定的 descriptor 接下來本文將針對這幾個設定的使用及應用場景做個說明 configurable: 預設為 false 已定義的 descriptor 是否可被更改 (writable:true 除外),以及 property 是否可被 delete 常見的例子是設定為 configurable:false 避免設定的 property 被 delete e.g. configurable:false 的例子其實蠻常見的,像是 browser 內建的 location writable: 預設為 false 常見的是與 configurable:false 搭配使用,可以避免 descriptor 與value 被做任何的修改.(進階一點的方法可以用待會介紹的 getter) enumable: 預設為 false 此 property 是否可以被列舉(for… in/Object.keys) 常用作於類似 prototype […]