JavaScript高级编程:面向对象设计与Object.defineProperty详解
170 浏览量
更新于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 上传
2020-10-22 上传
2020-12-07 上传
2021-01-30 上传
点击了解资源详情
2022-08-19 上传
2016-06-06 上传
2015-11-21 上传
2020-10-30 上传
只在当初微笑
- 粉丝: 275
- 资源: 866
最新资源
- Apress Beginning PL/SQL From Novice to Professional Aug 2007
- ARM教程全集_是你进入ARM好帮手
- Python 中文手册
- DFD introduction
- STM32F10x参考手册
- 2006年下半年软件设计师试卷
- GDB不完全手册.doc
- Makefile详细操作指南.pdf
- gdb中文操作手册-debug
- 数据库第四版答案王珊主编
- stc12c4051ad
- QC API 编程实践,有点技术含量的好东东!
- 数据结构的链式基数排序
- div+css网页设计
- ubuntu8.04速成手册1.0pdf
- 基于FPGA的快速浮点除法器IP核的实现