• 了解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>

      

  • 相关阅读:
    hoj 1061 排列树问题
    [译稿]Google的9条创新原则(转)
    vs2008 Sys未定义比较完整的解决方案
    js右下角升起小窗口脚本示例
    扩展了flash8里array的方法
    js 滚动、切换代码的搜集
    prototype 1.3.1 跟 ajax冲突!!!莫名其妙!
    用AS删除Flash中输入文本开始和结尾的空格【转载】
    Flash右键触发与屏蔽
    实现Flash跨域访问
  • 原文地址:https://www.cnblogs.com/JianweiWang/p/5221060.html
Copyright © 2020-2023  润新知