了解JavaScript 对象属性的标签

  对象属性的标签

  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>

  

posted @ 2016-02-27 11:27  JianweiWang  阅读(1586)  评论(0编辑  收藏  举报