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章 接下來該做什么
- 著作權