ES5中对象的属性可以分为‘数据属性’和‘访问器属性’两种。

  数据属性一般用于存储数据数值,访问器属性对应的是set/get操作,不能直接存储数据值。

  数据属性特性:value、writable、enumerable、configurable。

    解释:configurable:true/false,是否可以通过delete删除属性,能否修改属性的特性,能否把属性修改为访问器属性,默认false;

       enumerable:true/false,是否可以通过for in循环返回,默认false;

       writable:true/false,是否可以修改属性的值,默认false;

       value:undefined,设置属性的值,默认undefined。

   访问器属性特性:set、get、enumerable、configurable。

     解释:configurable:true/false,是否可以通过delete删除属性,能否修改属性的特性,能否把属性修改为访问器属性,默认false;

        enumerable:true/false,是否可以通过for in循环返回,默认false;

        set:function,读取属性值时调用的函数;

        get:function,修改属性值时调用的函数。

  将属性添加到对象或修改现有属性的特性使用Object.defineProperty() 或 Object.defineproperties()方法;

    Object.defineProperty(object, propertyname, descriptor):

    参数解释:object:需要添加或修改属性的对象;

         propertyname:属性的名称,字符串格式;

         descriptor:属性的描述,设置数据属性或访问器属性的特性。

  实例分析:

  数据属性:

    var emp = {

      name:'tom'

    };

    Object.defineProperty(emp,'name',{

      writable:false

    });

    emp.name = 'jery';
    console.log(emp.name);//输出tom,因为已经设置了writable为false

      

    Object.defineProperty(emp,'age',{

      configurable:false,

      writable:true,

      value:22

    });

    console.log(emp.age);//输出22,因为设置了value为22

    emp.age = 25;

    console.log(emp.age);//输出25,设置了writable为true

    delete emp.age;

    console.log(emp.age);//输出25,设置了configurable为false,此属性删除不了

  访问器属性:

    var emp ={

      _name:'tom',

      _age:20

    };

    

    Object.defineProperty(emp,'name',{

      get:function(){

          return this._name;

        }

    });

    console.log(emp.name);//输出tom,由get方法返回_name的值

    emp.name = 'jery';

    console.log(emp.name);//输出tom,没有set方法,修改不了_name的值 

    Object.defineProperty(emp,'age',{

      configurable:true,

      get:function(){

       return this._age;

      }

      set:function(age){

        this._age = age;

      }

    });

    emp.age = 25;  
    console.log(emp.age)//输出25,emp.age=25是使用set方法将25赋值给_age,emp.age是使用get方法将_age的读取出来

    delete emp.age;

    console.log(emp.age);//输出undefined,configurable为true,可以使用delete方法将emp.age属性删除

  备注:访问器属性可以起到很好的保护作用,当只有get方法时,就实现只读不能写;反之,只有set时,便是只能写入而不能读取

JavaScript数据属性与访问器属性的更多相关文章

  1. JavaScript 数据属性和访问器属性

    在JavaScript中对象被定义为"无序属性的集合,其属性可以包含基本值.对象或函数."通俗点讲,我们可以把对象理解为一组一组的名值对,其中值可以是数据或函数. 创建自定义对象通 ...

  2. 浅谈Javascript数据属性与访问器属性

    ES5中对象的属性可以分为‘数据属性’和‘访问器属性’两种. 数据属性一般用于存储数据数值,访问器属性对应的是set/get操作,不能直接存储数据值. 数据属性特性:value.writable.en ...

  3. JavaScript | 数据属性与访问器属性

    属性类型 数据属性 - 包含一个数据值的位置,可以读取和写入值 [writable] 是否能修改属性的值 true [enumerable] 是否通过for in 循环返回属性(是否可以被枚举) tr ...

  4. javascript数据属性和访问器属性

    var book={ _year:2004, edition:1};Object.defineProperty(book,"year",{ get:function(){ retu ...

  5. JavaScript 属性类型(数据属性和访问器属性)

    数据属性 数据属性包含一个数据值的位置.在这个位置可以读取和写入值.数据属性有 4 个描述其行为的特性. [[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修 ...

  6. javascript对象属性——数据属性和访问器属性

    ECMA-262第五版在定义时,描述了属性property的各种特征,定义这些特性是为了实现javascript引擎用的,为了表示该特性是内部值,规范把它们放在了两对儿方括号中,例如[[Enumera ...

  7. JavaScript中的数据属性和访问器属性

    在学习JavaScript原型(prototype)和原型链(prototype chain)知识的时候,发现数据属性和访问器属性的重要性,通过不断的查找相关知识,浅显理解如下,若有差错,希望不吝赐教 ...

  8. Js中的数据属性和访问器属性

    Js中的数据属性和访问器属性 在javaScript中,对象的属性分为两种类型:数据属性和访问器属性. 一.数据属性 1.数据属性:它包含的是一个数据值的位置,在这可以对数据值进行读写. 2.数据属性 ...

  9. js中属性类型:数据属性与访问器属性

    js中属性类型分为两种:数据属性和访问器属性 在js中,对象都是由名值对构成的,名:就是我们所说的属性名,值就是属性对应的值(基本值.对象.方法). ECMA-262第5版定义了只有内部才用的特性,描 ...

随机推荐

  1. guava学习--Objects

    转载:https://my.oschina.net/realfighter/blog/349821 Java中的Object类是所有Java类的超类(也就是祖先),所有对象都实现Object类中的方法 ...

  2. Orchard中codegen相关命令

    Orchard开放了命令行功能,用于在快速创建代码. 由于该功能默认没有开启.系统中提供两种开启方式: 1.进入管理后台->Modules->找到[Code Generation]-> ...

  3. 使用CSS3线性渐变实现图片闪光划过效果

    <p class="overimg"> <a><img src="http://www.nowamagic.net/librarys/ima ...

  4. javadoc 生成自定义的标签

    转自:http://www.blogjava.net/lishunli/archive/2010/01/12/309218.html Technorati 标记: tools 关键词 个性化地生成Ja ...

  5. uva 213 Message Decoding

    思路来自紫书...开始时的思路估计100行+,果断放弃!关键:1.正确提取出函数!   initmap():初始化字母与整数的映射.   returnint(x):向后读取x位,并转换为十进制数返回. ...

  6. php 错误堆栈

    ob_start();  debug_print_backtrace();   $errpr = ob_get_clean();

  7. 思维导图MindManager的文件格式与例图

    思维导图软件很多,能够画出思维导图的软件更多.作为流传较广而又比较成熟的思维导图软件,MindManager有专门的文件格式.如果读者想多借鉴导图,就应该了解MindManager的文件格式. Min ...

  8. RTTI

    RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型.   编辑本段RTTI介绍 RTTI提 ...

  9. unity代码加密for Android,mono编译

    uinty3d加密推荐几篇比较好的博客链接: http://www.cppcourse.com/u3d-encryption.html http://www.xuanyusong.com/archiv ...

  10. install vim-powerline

    1, install pip dnf install python-pip 2,install powerline-status pip install git+git://github.com/Lo ...