Object.defineProperty 中的 writable 和 configurable 和 enumerable 的理解


在現在比較新的框架中, 比如 reactjs, vuejs中用得很多的一個屬性便是

Object.defineOProperty

此屬性的文檔在網上一搜, 其中的幾個屬性,

包括 存取描述符(有set和get的) 和 數據描述符(直接有 value 的就是數據描述符)

有 set get 有 value writable enumerable configurable

雖然有 set 和 get, 但是定義的時候還是要用到
enumerable 和 configurable

set 和 get 類似 writable 和 value

 

其中的 configurable 和 writable 比較讓人混淆。

configurable 給的說明是 如果為 false , 那么不可以修改, 不可以刪除.
但 writable 給的說明是如果設置為 false, 不可以采用 數據運算符 進行賦值
所以這里就有一部分交叉. 如果 writable 為 true 的時候, configurable 為 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 控制是否可以枚舉.

例如一下的例子,解釋了一下 enumerable

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, 是沒有具體的值的.
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM