首页 理论教育JavaScript配置属性的定义及应用

JavaScript配置属性的定义及应用

【摘要】:图8.3.4配置属性数据描述符先定义属性name的writable属性为false,表示该属性可读不可写。图8.3.5配置属性迭代在一些特定环境中设置属性enumerable为false,既能存放属性,又能避免属性被其他函数访问。图8.3.6属性存取操作符定义对象abert的name和age属性后,设置属性age时检测属性值是否为合理返回的数字,不合理则不设置。

配置属性是指设置属性的描述符;属性描述符包括数据属性和访问器属性。数据属性是指属性是否可写、可枚举、可配置;访问器属性是指属性的getter和setter函数。

使用defineProperty()定义属性配置的描述符如下表所示。

表8.3.1 属性描述符

1.可写描述符

8.3.4.html先将属性设置为不可写,再将属性设置为可写,查看属性值是否修改成功,如下所示。

动手写8.3.4

执行8.3.4.html,输出结果到网页,如下图所示。

图8.3.4 配置属性数据描述符

先定义属性name的writable属性为false,表示该属性可读不可写。再次直接设置属性值,设置失败。修改writable属性为true,设置属性值成功。

2.枚举描述符

8.3.5.html定义两个属性,其中一个可以枚举,另一个不可以枚举,使用for循环枚举对象的属性列表,如下所示。

动手写8.3.5

执行8.3.5.html,输出结果到网页,如下图所示。(www.chuimin.cn)

图8.3.5 配置属性迭代

在一些特定环境中设置属性enumerable为false,既能存放属性,又能避免属性被其他函数访问。

3.getter和setter

如果定义了属性的getter描述符,则获取属性的值时会调用getter函数;同样地,如果定义了属性的setter描述符,则设置属性的值时会调用setter函数。

8.3.6.html设置属性的getter和setter函数,如下所示。

动手写8.3.6

执行8.3.6.html,输出结果到网页,如下图所示。

图8.3.6 属性存取操作符

定义对象abert的name和age属性后,设置属性age时检测属性值是否为合理返回的数字,不合理则不设置。

提示

描述符writable或value和get或set不能同时出现,否则触发错误“Uncaught TypeError: Invalid property descriptor. Cannot both specify accessors and a value or writable attribute”,即不能同时指定这对描述符。