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. PHP实现文件上传

    一.关于全局变量$_FILES $_FILES包含有所有上传的文件信息.假设文件上传字段的名称为 img.则 $_FILES['img']['name']:客户端上传的文件的原名称. $_FILES[ ...

  2. Web APP开发技巧总结(转)

    一.META/LINK相关: 1.百度禁止转码 通过百度手机打开网页时,百度可能会对你的网页进行转码,往你页面贴上它的广告,非常之恶心.不过我们可以通过这个meta标签来禁止它: <meta h ...

  3. 删除ORACLE的步骤

    1.关闭oracle所有的服务.可以在windows的服务管理器中关闭: 2.打开注册表:regedit 打开路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlS ...

  4. CodeForces #362 div2 B. Barnicle

    题目链接: B. Barnicle 题意:给出科学计数法 转化成十进制的整数或小数 并输出. 思路:暑假训练赛见过了,当时大腿A掉了,并表示是道水题. 刷CF再次遇见,毫不留情WA了几次.比如: 0. ...

  5. css常用样式

    border: border-width border-style border-color (边框属性) 全部属性 div {width:100px; height:100px; border-st ...

  6. 2015年最好的PHP框架调查统计

    2015年最流行的框架,Laravel框架获得赢家! 正如预期的那样,Laravel这次又一次高出了一大截. 有一些人可能会担心,部分框架分裂版本可能影响Laravel的调查结果,并给它一个不公平的优 ...

  7. Git 分支

    Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照,某一次的提交指向这处时刻的文件快照,看起来就像每次提交都保存了当时的文件,连续的提交形成一条长链 分支 指向某一个特定的提交,不同的 ...

  8. nginx 安装与配置

    centos7环境下nginx的安装  版本 0.85 tar zxvf nginx.tar.gz cd nginx ./configure // ./configure --help 查看编译选项 ...

  9. JavaScript中的作用域

    很多(JavaScript)开发者都在讨论"作用域",但它是什么?它们在JavaScript中的任何地方!我发现很多年轻的开发者不知道作用域是什么.他们中大多数人可以用jQuery ...

  10. java 排序

    class Employee { private String name; private String id; private String salary; public static void m ...