http://speakingjs.com/es5/ch17.html
[TOC]
# 第17章 对象和继承
在JavaScript的面向对象编程中,有下面这些内容层次:
1. 第1节:面向对象与单一对象(包含在第1节:单一对象)
2. 第2节:对象的原型链(第2节中描述:对象之间的原型关系)
3. 第3节:构造器作为实例的工厂,类似于其他语言中的类(在第3节中讨论过:实例的构造函数工厂)
4. 第4节:子类化,通过继承现有的方法创建新的构造函数(第4节:构造函数之间的继承关系)
每节都只依赖于之前的层次,使您能够逐步地学习JavaScript 面向对象编程。章节1和2构成了一个简单的核心,当你对更复杂的第三节和第四节感到困惑的时候你可以回头查看它们。
## 第一节 单一对象
粗略地来说, JavaScript 中的所有对象都是从字符串到值的映射 (字典)。对象中的 (键、值) 项称为属性。属性的键始终是文本字符串。属性的值可以是任何 JavaScript 值, 包括函数。方法是其值为函数的属性。
.....
## 任何值转化为对象
这不是常见的用例,但有时会需要把任何一个值转化为对象,`Object()`,用作函数(不是构造函数),提供该服务。 它会产生以下结果:
| 输入值 | 结果 |
| --- | --- |
| (Called with no parameters) | {} |
| `undefined` | {} |
| `null` | {} |
| A boolean `bool` | new Boolean(`bool`) |
| A number `num` | new Number(`num`) |
| A string `str` | new String(`str`) |
| An object `obj` | `obj` (unchanged, nothing to convert) |
示例:
```js
> Object(null) instanceof Object
true
> Object(false) instanceof Boolean
true
> var obj = {};
> Object(obj) === obj
true
```
下面的函数检查值是否为对象:
```js
function isObject(value) {
return value === Object(value);
}
```
注意,如果值不是一个对象,上面的函数将会创建其对象。你可以通过`typeof`,实现相同的功能(见[陷阱:typeof null](###))。
您还可以调用`Object`作为构造函数,结果与将其作为函数调用的结果相同:
```js
> var obj = {};
> new Object(obj) === obj
true
> new Object(123) instanceof Number
true
```
*提示*:
避免构造函数;一个空的对象字面量几乎总是一个更好的选择:
```js
var obj = new Object(); // avoid
var obj = {}; // prefer
```
## `this`作为函数和方法的隐式参数
当你调用一个函数时,`this`总是一个(隐式)参数:
**草率模式下的常规函数**
### 调用函数时设置`this`:`call()`、`apply()`和`bind()`
记住,函数也是对象。
- 本书简介
- 前言
- 关于这本书你需要知道些什么
- 如何阅读本书
- 目录
- I. JavaScript的快速入门
- 第1章 基础的JavaScript
- II. 背景知识
- 第2章 为什么选择JavaScript?
- 第3章 JavaScript的性质
- 第4章 JavaScript是如何创造出来的
- 第5章 标准化:ECMAScript
- 第6章 JavaScript的历史里程碑
- III. 深入JavaScript
- 第7章 JavaScript语法
- 第8章 值
- 第9章 运算符
- 第10章 布尔值
- 第11章 数字
- 第12章 字符串
- 第13章 语句
- 第14章 异常捕获
- 第15章 函数
- 第16章 变量:作用域、环境和闭包
- 第17章 对象和继承
- 第18章 数组
- 第19章 正则表达式
- 第20章 Date
- 第21章 Math
- 第22章 JSON
- 第23章 标准全局变量
- 第24章 编码和JavaScript
- 第25章 ECMAScript 5中的新功能
- IV. 技巧、工具和类库
- 第26章 元代码样式指南
- 第27章 调试的语言机制
- 第28章 子类化内置构造函数
- 第29章 JSDoc:生成API文档
- 第30章 类库
- 第31章 模块系统和包管理器
- 第32章 其他工具
- 第33章 接下来该做什么
- 著作权