對象屬性的標簽 value(屬性值), writable(屬性可寫), enumerable(屬性可枚舉), configurable(屬性可配置), 這些屬性標簽使對象所持有的屬性體現出不同的特性, 以便開發者開發使用. value value, 屬性的值, 這個屬性是最直觀的體現, 一個屬性我們
對象屬性的標簽
value(屬性值), writable(屬性可寫), enumerable(屬性可枚舉), configurable(屬性可配置), 這些屬性標簽使對象所持有的屬性體現出不同的特性, 以便開發者開發使用.
value
value, 屬性的值, 這個屬性是最直觀的體現, 一個屬性我們使用的就是它的值, 這個值的類型可以是對象, 字元串, 值等任意類型. 如果未設置的話, 值會是undefined.
Object.defineProperty(person, 'name', {
configurable : false,
writable : false,
enumerable : true,
value : "Jianwei Wang"
});
document.write(person.name); //Jianwei Wang
"Jianwei Wang"就是person.name的值.
configurable
confirurable, 顧名思義可配置的, 意思就是在標簽為true時這個屬性允許修改各種屬性標簽配置(true or false), delete關鍵字是否可以刪除這個屬性, 如果標簽為false, 那麼是不允許修改標簽配置的, delete也不可以使用了. 它的作用主要是配置屬性的標簽.
writable
writable, 可寫入的, 如果這個設置為false, 那麼這個屬性將不允許寫入, 也就無法將writable設置為新的值.
代碼演示, 可寫與可配置的特性.
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title></title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 //聲明一個對象並初始化 10 var person = { 11 name : "wang", 12 age : 23 13 }; 14 //定義一個key為hobby的屬性, 設置為不可配置, 值為eat. 15 //未設置的標簽值預設為false, 所以這個屬性是不允許配置, 枚舉, 以及寫入的. 16 Object.defineProperty(person, 'hobby', { 17 value : "eat" 18 }); 19 person.hobby = "run"; //寫入屬性為run 20 document.write(person.hobby); //eat, 說明寫入失敗 21 Object.defineProperty(person, 'hobby', { 22 writable : true 23 }); //對屬性進行重新配置, 發現出錯, 不允許重新配置可寫入. 24 </script> 25 </body> 26 </html>
enumerable
enumerable, 可枚舉的, 如果將其關閉, 那麼這個屬性將不會被遍歷出來. 所以那些用於屬性遍歷的方法就都不是很好用了(for in, Object.keys等), 檢測還是可以的(in, hasOwnProperty等). 所以總結起來就是enumerable關閉後的作用就是, 讓你知道我有, 但是就是不給你看.
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=gb18030"> 5 <title></title> 6 <script type="text/javascript"> 7 var person = { 8 name : "Jianwei Wang", 9 age : 23 10 }; //聲明並初始化對象 11 Object.defineProperty(person, "gender", { 12 configurable : true, 13 enumerable : true, 14 value : "male" 15 }); //配置一個新的屬性gender, 設置為可配置, 可枚舉的, 值為male 16 document.write(Object.keys(person) + "<br />"); //name, age, gender 17 Object.defineProperty(person, "gender", { 18 enumerable : false, 19 }); //重新配置gender為不可枚舉屬性. 20 document.write(Object.keys(person) + "<br />"); //name, age 21 document.write("gender" in person); //true 22 </script> 23 </head> 24 <body> 25 </body> 26 </html>