ajax实用技术教学课件作者程继洪肖川李海斌编著第5章对象、数组与函数5.3.pptx
文本预览下载声明
5.3 属性的分类与特性* 5.3.1 属性分类
JavaScript对象的属性分为两类:数据属性和访问属性。
没有特别说明的属性都是数据属性,前面加get/set关键字修饰的属性为访问属性。
get表示该属性可读,由get修饰的属性也称为getter方法;set表示该属性可写,由set修饰的属性也称为setter方法。
关于访问属性有以下规则:
◆ 如果只设置了getter方法,则属性只读,不可写;
◆ 如果只设置了setter方法,则属性只写,不可读;
◆ 如果同时设置了getter和setter方法,则属性是即可读又可写的。
数据属性前面已经介绍过了(5.1.1节),下面说明访问属性的声明格式。下面借用文献[18]的例子来说明访问属性的用法。
// 定义复数
var p = {
// x坐标和y坐标——数据属性
x: 1,
y: 1,
// 可读可写的r属性,求x + yi的模
get r() { return Math.sqrt(this.x * this.x + this.y * this.y);},
set r(newValue) {
var oldValue = Math.sqrt(this.x * this.x + this.y * this.y);
var ratio = newValue / oldValue;
this.x *= ratio;
this.y *= ratio;
},
// 只读的theta属性,求复数x+yi的辐角
get theta() { return Math.atan2(this.y, this.x); }
};
对以上代码的说明:
◆ Math.sqrt(x)——对参数x求平方根;
◆ Math.atan2(y, x)——求坐标点(x, y)与x轴的角度,也可以理解为求x+yi的辐角。
以上代码声明了可读可写的r属性,因为它即有getter方法也有setter方法。声明了只读的theta属性,只为它只有getter方法。
getter方法的声明格式如下:
get r() { return Math.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 }。
◆ 返回值——设置/修改
显示全部