JavaScript高级编程:面向对象设计与Object.defineProperty详解
62 浏览量
更新于2024-08-28
收藏 80KB PDF 举报
在《JavaScript高级程序设计(第三版)》的学习笔记中,第6章深入探讨了面向对象编程中的核心概念——对象。对象是程序设计的基础,它将数据和行为封装在一起,是实现复杂逻辑的关键。本章节着重介绍了两种类型的属性:数据属性和访问器属性。
**1. 数据属性:**
数据属性是对象中常见的属性类型,它们具有以下特性:
- **configurable(可配置性)**:默认为true,允许开发者通过`Object.defineProperty()`方法修改或删除属性的可配置性,包括修改其特性或者将其转换为访问器属性。
- **enumerable(可枚举性)**:默认为true,决定属性是否在`for-in`循环中可见,用于遍历对象的属性。
- **writable(可写性)**:默认为true,表示属性值是否可以被修改。
- **value(值)**:数据存储的位置,初始值为undefined。
通过`Object.defineProperty()`函数可以动态定义这些属性,例如:
```javascript
var obj = {};
Object.defineProperty(obj, "name", {
writable: true,
value: "nihao"
});
```
这段代码定义了一个名为"name"的数据属性,允许值被修改。
**2. 访问器属性:**
访问器属性提供了一种更灵活的方式,用于控制属性的读取和写入行为。它们没有`value`,而是由`get`和`set`方法定义:
- `get`:读取属性时调用,如果没有显式设置,将返回`undefined`。
- `set`:写入属性时调用,可以执行自定义逻辑,如验证新值。
示例:
```javascript
var obj = {
_year: 2004,
edition: 1
};
Object.defineProperty(obj, "year", {
get: function() {
return this._year;
},
set: function(newValue) {
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
});
obj.year = 2005; // 设置年份后,edition自动更新
alert(book.edition); // 输出2
```
**3. 定义多个属性:**
对于需要同时定义多个属性的情况,可以使用`Object.defineProperties()`方法,它接收两个参数:目标对象和一个包含属性及其描述符的对象映射。这个方法支持的浏览器范围更广泛,如IE9及以上版本。
**4. 读取属性:**
获取对象自身的属性(不包括原型链上的属性)可以通过`Object.getOwnProperty`,但现代JavaScript推荐使用`Object.getOwnPropertyDescriptor()`或`Object.getOwnPropertyNames()`等方法。
第6章详细讲解了JavaScript中对象的属性管理,包括数据属性和访问器属性的定义、操作,以及如何利用`Object.defineProperty()`和`Object.defineProperties()`来控制属性的行为。理解这些概念是实现高效、灵活的JavaScript程序设计的关键。
2012-01-07 上传
2023-10-05 上传
2023-07-19 上传
2023-08-06 上传
2024-02-07 上传
2024-02-04 上传
2023-03-16 上传
2024-06-02 上传
2023-07-08 上传
只在当初微笑
- 粉丝: 275
- 资源: 866
最新资源
- 十种常见电感线圈电感量计算公式详解
- 军用车辆:CAN总线的集成与优势
- CAN总线在汽车智能换档系统中的作用与实现
- CAN总线数据超载问题及解决策略
- 汽车车身系统CAN总线设计与应用
- SAP企业需求深度剖析:财务会计与供应链的关键流程与改进策略
- CAN总线在发动机电控系统中的通信设计实践
- Spring与iBATIS整合:快速开发与比较分析
- CAN总线驱动的整车管理系统硬件设计详解
- CAN总线通讯智能节点设计与实现
- DSP实现电动汽车CAN总线通讯技术
- CAN协议网关设计:自动位速率检测与互连
- Xcode免证书调试iPad程序开发指南
- 分布式数据库查询优化算法探讨
- Win7安装VC++6.0完全指南:解决兼容性与Office冲突
- MFC实现学生信息管理系统:登录与数据库操作