value(属性值), writable(属性可写), enumerable(属性可枚举), configurable(属性可配置), 这些属性标签使对象所持有的属性体现出不同的特性, 以便开发者开发使用.
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的值.
confirurable, 顾名思义可配置的, 意思就是在标签为true时这个属性允许修改各种属性标签配置(true or false), delete关键字是否可以删除这个属性, 如果标签为false, 那么是不允许修改标签配置的, delete也不可以使用了. 它的作用主要是配置属性的标签.
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, 可枚举的, 如果将其关闭, 那么这个属性将不会被遍历出来. 所以那些用于属性遍历的方法就都不是很好用了(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>