在如今比較新的框架中, 好比 reactjs, vuejs中用得不少的一個屬性即是vue
Object.defineOPropertyreact
此屬性的文檔在網上一搜, 其中的幾個屬性,框架
包括 存取描述符(有set和get的) 和 數據描述符(直接有 value 的就是數據描述符)spa
有 set get 有 value writable enumerable configurablecode
雖然有 set 和 get, 可是定義的時候仍是要用到
enumerable 和 configurable
set 和 get 相似 writable 和 value
其中的 configurable 和 writable 比較讓人混淆。對象
configurable 給的說明是 若是爲 false , 那麼不能夠修改, 不能夠刪除. 但 writable 給的說明是若是設置爲 false, 不能夠採用 數據運算符 進行賦值
var o = {}; // 建立一個新對象 Object.defineProperty(o, "a", { value : "original", writable : false, // 這個地方爲 false enumerable : true, configurable : true }); o.a = "new"; //此時候, 是更改不了 a 的. var o = {}; // 建立一個新對象 Object.defineProperty(o, "a", { value : "original", writable : true, enumerable : true, configurable : false //這裏爲false }); o.a = "new";//此時候, a 進行了改變 //可是若是 delete o.a //將返回 false, 而且 a 沒有被刪除
//結論 此刻咱們看來, 對於咱們的影響, 目前來看, 主要是 configurable 控制是否能夠刪除 writable 控制是否能夠修改(賦值) 固然 enumerable 控制是否能夠枚舉.
例如一下的例子,解釋了一下 enumerableblog
var o = {}; // 建立一個新對象 Object.defineProperty(o, "a", { value : 37, writable : true, enumerable : false,//此處設置爲false, 在枚舉的時候會忽略 configurable : true }); for(var i in o){ console.log(o[i]); // undefined, 是沒有具體的值的. }