《HTML教程》-5.3教学材料_第1页
《HTML教程》-5.3教学材料_第2页
《HTML教程》-5.3教学材料_第3页
《HTML教程》-5.3教学材料_第4页
《HTML教程》-5.3教学材料_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关于访问属性有以下规则:◆如果只设置了getter方法,则属性只读,不可写;

◆如果只设置了setter方法,则属性只写,不可读;

◆如果同时设置了getter和setter方法,则属性是即可读又可写的。数据属性前面已经介绍过了(5.1.1节),下面说明访问属性的声明格式。下面借用文献[18]的例子来说明访问属性的用法。//定义复数varp={ //x坐标和y坐标——数据属性 x:1, y:1, //可读可写的r属性,求x+yi的模 getr(){returnMath.sqrt(this.x*this.x+this.y*this.y);}, setr(newValue){varoldValue=Math.sqrt(this.x*this.x+this.y*this.y); varratio=newValue/oldValue; this.x*=ratio; this.y*=ratio; }, //只读的theta属性,求复数x+yi的辐角 gettheta(){returnMath.atan2(this.y,this.x);}};对以上代码的说明:◆Math.sqrt(x)——对参数x求平方根;◆Math.atan2(y,x)——求坐标点(x,y)与x轴的角度,也可以理解为求x+yi的辐角。以上代码声明了可读可写的r属性,因为它即有getter方法也有setter方法。声明了只读的theta属性,只为它只有getter方法。getter方法的声明格式如下:getr(){returnMath.sqrt(this.x*this.x+this.y*this.y);}先是get关键字,然后是属性名r,再后面是一对圆括弧,后面是一对花括号。花括号中是对属性r读取时所进行的操作,也就是如何确定r的值。其结构分解如下图所示:setter方法的声明与getter方法类似,不再赘述。需要说明的是,虽然访问属性表面上看起来像是函数,但实际上是属性,只能通过访问属性的方法进行访问,而不能作为函数进行访问(有关函数的内容后面详细介绍)。还要注意的是,通过getter和setter方法我们获得了控制属性读写特性的方法:◆只读属性——只提供getter方法;

◆只写属性——只提供setter方法;

◆读写属性——同时提供getter和setter方法。访问特性实例见随书源码的Listing5-2.html中。5.3.2属性的特性1、属性特性在JavaScript中控制属性的读写属性的还有以下几个特性:

◆数据属性——value、writable、enumerable和configurable。

◆访问属性——get、set、enumerable和configurable。其中的属性说明如下[21]:◆value——表示属性的默认值,缺省值为undefined。◆enumerable——表示属性是否可枚举(即可否用for…in语句或Object.keys()方法列出对象的这个属性),false为不可枚举,缺省值为true。Object.keys()方法用于获得/返回指定对象的所有属性名。◆writable——表示属性的值value是否可修改,false为不可修改,缺省值为true,即属性可修改。◆configurable——能否使用delete、能否修改属性特性、或能否修改访问器属性,false为不可重新定义,缺省值为true。2、设置/修改属性特性

可以通过Object.defineProperty()设置/修改属性的特性,defineProperty()函数的原型如下:Object.defineProperty(对象名,属性名,属性描述符)其参数说明如下:

◆对象名——要进行属性设置的对象。

◆属性名——要进行设置的属性。

◆属性描述符——是一个对象,包含用于设置的属性特性。格式如{value:1,writable:false,enumerable:false, configurable:true}。

◆返回值——设置/修改属性后的对象。此外,还有Object.defineProperties()方法,可以一次设置或修改多个属性,函数原型如下:Object.defineProperties(对象名,属性特性描述对象)参数说明如下:

◆对象名——要修改属性的对象名称;

◆属性特性描述对象——属性和属性描述符的映射对象,即“属性:属性描述符”组成的键值对组成的对象。

◆返回值——设置/修改属性后的对象。3、获取属性的特性

Object.getOwnPropertyDescriptor()方法用于获得对象的指定属性的特性,以属性描述符表示。它只能获得当前对象的属性特性,不能获得继承属性的特性。原型如下:Object.getOwnPropertyDescriptor(对象名,属性名)参数说明:

◆对象名——要获得属性特性的对象。

◆属性名——要获得特性的属性。

◆返回值——属性描述符的对象表示。对象属性控制的代码如清单5-3所示。对清单5-3对象属性的控制代码的解析出的知识点如下:1)两对概念:可读性和可枚举性,可写性与可配置性。可读性是指按照对象属性的访问方式能不能得到属性的值,如o.x可得到x的属性值1。而可枚举性是指通过for…in循环或者Object.keys()能否得到对象的属性。对于不可枚举的属性可以通过o.x的形式获取值,但却看不到对象o的x属性,这似乎有点矛盾!既然看不到对象o的x属性,为什么可以通过o.x获得属性值呢?或许我们可以简单的这么认为,可读性是给人看的,只要有属性且没有设置成私有属性(这里我们不讨论如何实现属性的私有化,即如何实现面向对象的封装性)就可以通过“对象名.属性名”的方式读取属性的值,而与属性的可枚举性无关。可枚举性是给“程序”看的,也就是说不可枚举的属性,“程序”是看不到的。也就相当于可读性对于属性的值给人开了扇“窗”,而这扇“窗”对于“程序”是关闭的。可写性是指是否可以对属性的值value进行修改/赋值,而可配置性是指是否可以对属性的特性进行操作,其中也包括可写性。如果配置不可配置,也即configurable:false,则无法更改属性特性——value/get、writable/set、enumerable和configurable。所以,对于清单5-4中对象o的属性x,Object.defineProperty(o,'x',{ value:1,//默认值 writable:false,//value不可修改(或不可写) enumerable:false,//不可枚举 configurable:true//可配置});虽然它的writable:false,但它的configurable:true,我们仍然可以用Object.defineProperty(o,'x',{value:3});的方式修改它的value特性,即属性的值,因为x属性是可配置的,但不能通过o.x=3的方式对它赋值,因为它是不可写的。(2)属性描述符中访问属性的声明属性描述符中声明访问属性的方式与字面量中不同,如下图所示:因为在属性描述符中声明访问属性时,已经在Object.defineProperty()函数的第二个参数指定了属性名字,所以在get后面不需要再指定属性名了,而使用function关键字代替,还要注意的是get后面有一冒号(:),而对于字面量中声明访问属性,是没有这一冒号的!(3)属性描述符的懒格式与代码说明对于上面的代码还有一处需要说明的地方,那就是defineProperties()设置属性的说明。这里涉及两点:第一属性描述符的懒格式,第二代码嵌套声明的说明。如下图所示:属性描述符的懒格式是指书写属性描述符时不用包含所有的属性特性,只包含需要说明的属性特性即可,其他的采用缺省值。如图中name属性、author属性和price属性的描述符都采用了懒格式的写法。也就是说,属性描述符中可以只出现特性值为非undefined和false的访问特性,其他的访问特性采用缺省值

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论