• 第六章-面向对象的程序设计(理解对象)


       ESMA把对象定义为:“无序属性的集合,其属性可以包含基本值,对象和函数”。严格的讲,这相当于说对象是一组没有特定顺序的值,对象的每个属性或方法都有一个名字,而每一个名字都映射到一个值。

    1.理解对象

    创建对象有对象字面量的方法,这种方法比较常用,也是比较推荐的。

    1 var person ={
    2            name:'xu',
    3            age:27,
    4            sayName:function(){
    5                  alert(this.name);
    6               }
    7         };

    还有创建对象的实例的方法:

    2.属性的类型

         

    属性有两种类型:数据属性和访问器属性。

    数据属性包含一个数据值的位置,在这个位置可以读取和写入值。数据属性有四个描述其行为的特性:

          要修改默认属性的特性,必须使用ECMASript5的Object.defineProperty()方法,这个方法收三个参数:属性所在的对象,属性的名字和一个描述符对象。描述符对象的属性就是上面所说的四个特性。

         注意点:把configurable设置为false,表示不能从对象中删除属性,如果对这个属性调用delete方法,在非严格模式下什么也不会发生,而在严格模式下会导致报错;而且,一旦把属性定为不可配置,就不能再把它变回可配置了。此时在调用Object.defineProperty()方法修改除writable以外的特性,都会导致报错。

        也就是说,可以多次调用 Object.defineProperty()方法修改同一个属性,但在把 configurable 特性设置为 false 之后就会有限制了。

        在调用 Object.defineProperty()方法时,如果不指定,configurable、enumerable 和 writable 特性的默认值都是 false。 

    访问器属性

       访问器属性不包含数据值,包含一对getter和setter函数(这两个函数不是必须的),在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值在写入访问器属性时,会调用setter函数,并传入新值,这个函数负责决定如何处理数据。访问器有四个特性。

    访问器属性不能直接定义,必须使用Object.defineProperty()方法来定义。

    不一定同时指定getter和setter。只指定getter意味着属性不能写,尝试写入属性会被忽略,严格模式下,尝试写入只指定了getter函数的属性会抛出错误。类似的,只指定setter属性的函数也不能读,否则在非严格模式下会返回undefined,严格模式下会抛出错误。

    3.定义多个属性

          定义多个属性的时候,ES5定义了新的方法Object.defineProperties()方法。利用这个方法,可以通过描述符一次定义多个属性。它接收两个对象参数:第一个对象是要添加和修改其属性的对象,第二个对象的属性和第一个对象中要添加或修改的属性一一对应。

    4读取属性的特性

    使用ES5中的Object.getOwnPropertyDescriptor()方法,可以取得给定属性的描述符,这个方法接受两个参数:属性所在的对象,和要读取描述符的属性名称。

    如上面的例子,可以得到:

  • 相关阅读:
    关于Oracle
    form表单中包含特殊字符,需要转义。
    mysql5.7解压版安装步骤
    mysql报1055错误
    配置maven私有仓库
    全选,反选
    前后端数据交互(json)
    正则表达式匹配html标签里的中文
    excel创建行、插入行、设置样式
    Python 中文字符的输出
  • 原文地址:https://www.cnblogs.com/xuzhudong/p/6551022.html
Copyright © 2020-2023  润新知