最新下載
紅警OL
三角洲行動
寶可夢大集結
夢幻水族館
少女前線
星之翼
小花仙精靈樂園
餐廳萌物語
山河旅探
戀與製作人
24小時閱讀排行榜
- 1 如何透過連接 MySQL 列來產生唯一的字母數字?
- 2 建構函數應該回傳 Promise 嗎?
- 3 如何填入 Pandas DataFrame 中缺少的日期?
- 4 流亡之路 2:滑行的死者演練
- 5 Go 聲明中底線逗號(“_”)的用途是什麼?
- 6 如何在 Go 中為 HTTP 用戶端設定代理?
- 7 如何修復 Windows 中的 Microsoft Office 安裝錯誤 30094-2016?
- 8 如何在迭代時安全地從 std::list 中刪除元素?
- 9 函數內部的參數修改如何影響 C 和 C 中的呼叫函數?
- 10 Sphinx 與 SOLR:哪種獨立全文搜尋引擎適合我的專案?
- 11 您不需要更新到 React 19
- 12 Spring的@Transactional註解如何管理事務和處理自呼叫?
- 13 為什麼 com.mysql.jdbc.Driver 已棄用以及如何遷移到新的 MySQL Connector/J 驅動程式?
- 14 C語言中如何正確傳遞參數?
- 15 泛型如何解決 Go 中型別特定的函數問題?
最新教學
-
- 國外Web開發全端課程全集
- 2020 2024-04-24
-
- Go語言實戰之 GraphQL
- 2297 2024-04-19
-
- 550W粉絲大佬手把手從零學JavaScript
- 3723 2024-04-18
-
- python大神Mosh,零基礎小白6小時完全入門
- 3352 2024-04-10
-
- MySQL 初學入門(mosh老師)
- 1980 2024-04-07
-
- Mock.js | Axios.js | Json | Ajax--十天精品課堂
- 2768 2024-03-29
目錄
第一部 概論
第1章 從零開始
1.1 為什麼選擇JavaScript?
1.1.1 用戶的偏好--B/S模式
1.1.2 在什麼情況下用JavaScript
1.1.3 對JavaScript的一些誤解
1.1.3.1 JavaScript和Java的關係
1.1.3.2 披著C外衣的Lisp
1.1.3.3 關於JavaScript的思維定勢
1.1.3.4 JavaScript是為業餘愛好者設計的?
1.1.3.5 JavaScript是物件導向的嗎
1.1.3.6 其他誤解
1.1.4 警惕!腳本誘惑
1.1.5 隱藏在簡單表像下的複雜度
1.1.6 令人迷惑的選擇--錦上添花還是雪中送炭 第一部 概論
#
第1章 從零開始
1.1 為什麼選擇JavaScript?
1.1.1 用戶的偏好--B/S模式
1.1.2 在什麼情況下用JavaScript
1.1.3 對JavaScript的一些誤解
1.1.3.1 JavaScript和Java的關係
1.1.3.2 披著C外衣的Lisp
1.1.3.3 關於JavaScript的思維定勢
1.1.3.4 JavaScript是為業餘愛好者設計的?
1.1.3.5 JavaScript是物件導向的嗎
1.1.3.6 其他誤解
1.1.4 警惕!腳本誘惑
1.1.5 隱藏在簡單表像下的複雜度
1.1.6 令人困惑的選擇--錦上添花還是雪中送炭
1.1.7 回到問題上來
1.2 JavaScript的應用範圍
1.2.1 客戶端的JavaScript
1.2.2 伺服器端的JavaScript
1.2.3 其他環境中的JavaScript
1.3 JavaScript的版本
1.3.1 瀏覽器中的JavaScript版本
1.3.2 其他版本
1.4 一些值得留意的特質
1.4.1 小把戲--神奇的魔法代碼
1.4.2 為客戶端服務--經典Hello World!的另一種JavaScript實作
1.4.3 資料互動--JavaScript的強大功能
1.4.4 JavaScript表面上的禁忌及如何突破這些禁忌
1.5 安全性與執行效率
1.5.1 資料安全--永遠的敏感話題
1.5.2 實戰!攻擊與防範
1.5.3 不容馬虎--時時關注性能
1.6 一個範例--JavaScript編寫的計算器
1.6.1 從需求分析開始--什麼是計算器?
1.6.2 系統設計--如何實現計算器?
1.6.3 系統實作--計算器的最終實作
1.6.4 持續改進--迭代的軟體開發流程
1.7 學習與使用JavaScript的幾點建議
1.7.1 像程式設計師的四個境界
1.7.2 吝惜你的程式碼
1.7.3 學會在環境中調試
1.7.4 警惕那些小缺陷
1.7.5 思考先於實踐--不要輕易動手寫程式碼
1.7.6 時刻回頭--聖賢也無法完全預知未來
1.8 關於本書的其餘部分
第2章 瀏覽器中的JavaScript
2.1 嵌入網頁的可執行內容
2.1.1 在哪裡裝載JavaScript程式碼
2.1.2 關於程式碼的Script標籤
2.1.3 我的程式碼什麼時候被執行--不同執行期的JavaScript程式碼
2.1.4 拿來主義--引入外部的JavaScript檔
2.2 賞心悅目的特效
2.2.1 生命在於運動--DHTML的效果
2.2.2 換一種風格--CSS的力量
2.2.3 用JavaScript操作DOM--一個可拖曳視窗的範例
2.3 使用JavaScript來與使用者互動
2.3.1 建立一個彈出式幫助和進度條
2.3.2 填錯了哦
2.4 繞過腳本陷阱
2.4.1 現實並不總是完美的
2.4.2 不能完全相信你所見到的
2.5 總結
第3章 開發環境與除錯方法
3.1 我可以用什麼來寫腳本--適合寫JavaScript的文字編輯器
3.2 來自瀏覽器的支援
3.2.1 主流瀏覽器
3.2.2 非主流瀏覽器
3.3 整合開發環境
3.3.1 什麼是整合開發環境
3.3.2 我需要整合開發環境嗎
3.3.3 適合JavaScript的整合開發環境
3.4 調試工具--提升開發效率的利器
3.4.1 什麼是調試
3.4.2 原始的調試方法--利用輸出語句、「反射」機制和偵錯物件來進行調試
3.4.3 適合JavaScript的調試工具
3.5 定位程式碼和呼叫堆疊
3.5.1 Step by Step--單步與斷點
3.5.2 監視記憶體
3.5.3 追蹤問題的來源--查看呼叫堆疊
3.5.4 遇到麻煩了--為什麼我追蹤不到程式碼
3.6 瀏覽器捕獲異常
3.6.1 異常處理機制--一個try/catch/finally模式的範例
3.6.2 異常的種類
3.6.3 應該在什麼時候「吃掉」異常
3.7 總結
第二部分 JavaScript核心
第4章 語言結構
4.1 JavaScript的基本文法
4.1.1 字元集
4.1.2 大小寫敏感
4.1.3 分隔符號
4.1.4 字、句子和段落
4.1.5 分號
4.1.6 標記
4.1.7 註
4.1.8 保留字
4.2 常數和變數
4.2.1 常數與變數
4.2.2 變數的標識符
4.2.3 變數的型別
4.2.4 變數的宣告
4.2.5 變數的作用域
4.3 表達式和運算子
4.3.1 表達式
4.3.2 運算子概述
4.3.3 算術運算子
4.3.4 關係運算子
4.3.5 邏輯運算子
4.3.6 位元運算子
4.3.7 賦值運算子
4.3.8 其他運算子
4.3.8.1 條件運算子
4.3.8.2 逗號運算子
4.3.8.3 物件運算子
4.3.8.4 類型運算子
4.3.8.5 void運算子
4.3.8.6 函數呼叫運算子
4.4 控制語句
4.4.1 表達式語句
4.4.2 語句區塊
4.4.3 條件語句
4.4.4 循環語句
4.4.5 跳轉語句
4.4.6 異常處理語句
4.4.7 其他語句
4.4.7.1 var語句
4.4.7.2 function語句
4.4.7.3 with語句
4.4.7.4 空語句
4.5 總結
第5章 資料型別
5.1 基本資料型態
5.1.1 數值
5.1.2 字串--一個字串相關操作的範例
5.1.3 布林型
5.2 數組和物件
5.2.1 數組
5.2.2 物件--一個建構函數的範例
5.3 函數型別--一個函數與閉包的範例
5.4 神奇的null和undefined
5.4.1 null
5.4.2 undefined--獨一無二的類型
5.5 正規表示式
5.5.1 正規表示式常數
5.5.2 正規表示式物件
5.6 值類型和引用類型
5.6.1 什麼是值和值的參考
5.6.2 使用值和使用參考
5.6.3 值與引用的相互轉換:裝箱與拆箱
5.7 類型識別與型別轉換
5.7.1 運行時類型識別--兩個運行的類型識別的例子
5.7.2 類型的自動轉換及其範例
5.7.3 強制型別轉換及其範例
5.7.4 進階用法--一個自訂類型轉換的範例
5.8 警惕數值陷阱
5.8.1 困惑--浮點數的精確度問題
5.8.2 誤差的修正及其範例
5.9 總結
第6章 函數
6.1 函數定義與函數呼叫
6.1.1 函數的定義
6.1.1.1 宣告式函數定義與函數表達式及其範例
6.1.1.2 JavaScript函數的奧妙-魔法程式碼
6.1.2 函數的呼叫
6.2 函數的參數
6.2.1 形參與實參
6.2.2 Arguments物件
6.2.2.1 一個使用Arguments物件偵測形參的範例
6.2.2.2 一個使用Arguments物件接收任一數參數的範例
6.2.2.3 一個使用Arguments物件模擬函數重載的範例
6.2.3 參數型別匹配--一個利用arguments實作函數重載機制的範例
6.3 函數的呼叫者和擁有者
6.3.1 函數的呼叫者
6.3.2 函數的擁有者--一個為函數指定擁有者的範例
6.3.3 動態呼叫--外來的擁有者
6.4 函數常數與閉包
6.4.1 匿名的函數
6.4.2 函數引用
6.4.3 函數參數與函數傳回值及其範例
6.4.4 進階用法--閉包作為局部域與延遲求值
6.5 高階抽象--Function類型與函數模版
6.5.1 動態建立函數--利用Function實作Lambda算符的範例
6.5.2 模式--函數工廠及其實例
6.6 總結
第7章 對象
7.1 什麼是物件
7.2 物件的屬性與方法
7.2.1 物件的內建屬性
7.2.2 為物件新增和刪除屬性
7.2.3 反射機制--枚舉物件屬性
7.3 物件的建構
7.3.1 建構子--一個雙精確度浮點數封裝類別的範例
7.3.2 預設構造與拷貝構造
7.3.3 物件常數
7.4 物件的銷毀和儲存單元的回收
7.5 JavaScript的內建物件
7.5.1 Math物件
7.5.2 Date物件--建立一個簡單的日曆
7.5.3 Error物件
7.5.4 其他內建物件
7.5.5 特殊的物件--全域物件與呼叫物件
7.6 總結
第8章 集合
8.1 陣列與陣列元素
8.1.1 陣列的建構
8.1.2 陣列常數
8.1.3 陣列元素
8.2 陣列物件與方法
8.2.1 找出元素
8.2.2 新增和刪除元素
8.2.3 集合運算及其範例
8.2.3.1 join()方法
8.2.3.2 reverse()方法
8.2.3.3 sort()方法
8.2.3.4 concat()方法
8.2.3.5 slice()方法
8.2.3.6 splice()方法
8.2.3.7 toSgring()方法和toLocaleString()方法
8.3 哈希表
8.3.1 什麼是哈希表
8.3.2 哈希表的建構
8.3.3 實作一個簡單的HashTable類型
8.4 進階用法--集合運算與閉包
8.5 總結
第9章 字符串
9.1 字串的建構
9.1.1 字串常數
9.1.2 轉義序列
9.1.3 字串建構子
9.2 字串的使用
9.2.1 比較字串
9.2.2 抽取與檢索子字串
9.2.3 連接拆分字串
9.2.4 字串的模式比對--一個字串格式校驗的範例
9.2.5 其他方法
9.3 字串與字元陣列
9.4 字串與文字處理--JavaScript棋譜閱讀器(一)
9.4.1 需求分析--什麼是棋譜與棋譜閱讀器
9.4.2 系統設計--棋譜與棋盤資料的字串描述
9.4.3 系統實作--解析與處理棋譜
9.4.4 完整的棋譜閱讀器
9.5 總結
第10章 正規表示式
10.1 什麼是正規表示式
10.1.1 正規表示式的概念
10.1.2 JavaScript中的正規表示式
10.2 正規表示式的規則
10.2.1 直接量字元
10.2.2 字元類別和布林操作
10.2.3 重複
10.2.4 選擇、分組與引用
10.2.5 指定匹配的位置
10.2.6 標誌-進階模式匹配的規則
10.3 模式匹配
10.3.1 用於模式匹配的String方法及其範例
10.3.2 用於模式匹配的RegExp方法
10.3.2.1 一個使用exec()方法從身分證號碼取得生日的範例
10.3.2.2 一個使用test()方法遍歷字串的範例
10.4 關於正規表示式包裝物件
10.4.1 RegExp物件-利用正規表示式實作全文檢索
10.4.2 RegExp的實例屬性
10.5 強大的正規表示式
10.5.1 分析正規表示式的局部
10.5.2 一個例子--強大的線上編輯器
10.5.3 建構新的文法--一個在JSVM中實作JSVM2解析器的範例
10.6 進階用法
10.7 用正規表示式處理文字
10.7.1 建立一個計價公式編輯器
10.7.1.1 需求分析--什麼是計價公式編輯器
10.7.1.2 系統實作--計價公式編輯器的實作
10.7.2 建立一個同步滾動歌詞播放器
10.7.2.1 需求分析--什麼是同步滾動歌詞播放器
10.7.2.2 系統設計與實作--處理LRC歌詞
10.8 總結
第三部分 瀏覽器與DOM
第11章 瀏覽器物件
11.1 Window物件--最基本的瀏覽器物件
11.1.1 Window物件概覽
11.1.2 Window物件的生命週期
11.1.3 Window物件的屬性與方法
11.1.4 一個多視窗應用的範例
11.2 Document物件--瀏覽器視窗文檔內容的代表
11.2.1 Document物件概覽
11.2.2 動態產生的文檔
11.2.3 Document物件的基本資訊
11.2.4 Document物件的外觀屬性
11.2.5 Document子物件介面
11.2.5.1 一個遍歷Anchors物件的例子
11.2.5.2 一個顛倒圖片的範例
11.3 對話框和狀態列
11.3.1 建立一個簡單對話框
11.3.2 其他類型的對話框
11.3.2.1 模擬對話框--建立一個視窗對話框及一個對話框阻塞進行的範例
11.3.2.2 showModalDialog和showModelessDialog--非W3C或ECMAScrip標準
11.3.3 狀態列
11.4 框架--上層的Window物件
11.4.1 多框架應用
11.4.2 框架之間的關係
11.4.3 框架的命名
11.4.4 子框架中的JavaScript
11.4.5 框架的應用--多頁籤顯示
11.4.5.1 什麼是頁籤
11.4.5.2 頁籤的實作--建立一個包含頁籤的頁面
11.5 表單和表單物件
11.5.1 Form物件及其範例
11.5.2 定義表單元素
11.5.3 用戶端表單校驗及其範例
11.5.4 建立一個通用的客戶端表單校驗元件
11.6 其他內建物件
11.6.1 Navigator物件--瀏覽器總體資訊的代表
11.6.2 Screen物件--提供顯示器解析度和可用色彩數量資訊
11.6.3 Location物件--目前視窗中顯示文件的URL的代表
11.6.4 History物件--一個有趣的物件
11.7 總結
第12章 文檔物件模型
12.1 什麼是DOM
12.1.1 把文件表示為樹
12.1.2 樹的節點
12.1.3 DOM物件的通用屬性與方法
12.1.4 HTML結構與DOM物件的關係--用JavaScript透過DOM來操作HTML文件
12.2 DOM與瀏覽器實作
12.2.1 關於DOM HTML API
12.2.2 DOM的等級與特性
12.2.3 DOM的一致性
12.2.4 差異性--瀏覽器的DOM方言
12.3 一組「盒子」--DOM元素
12.3.1 嵌套的「盒子」
12.3.2 「盒子」與「盒子」內容的分類
12.4 建立和刪除節點
12.4.1 建構全新的節點
12.4.2 平面展開--透過文件元素直接建立
12.4.3 回收空間--刪除不用的節點
12.5 存取和操縱DOM節點
12.5.1 打開每一個盒子--遍歷節點
12.5.2 弄清楚層級關係--父子與兄弟
12.5.3 如何搜尋特定節點
12.5.4 克隆節點--一個使用cloneNode()複製表格的範例
12.5.5 移動節點及其範例
12.5.6 關於新增行和排序的小技巧
12.6 讀寫資料--新增、修改和刪除屬性
12.7 外觀與行為
12.7.1 DOM樣式屬性
12.7.2 控制DOM元素的顯示與隱藏
12.7.3 改變顏色和大小--一個簡單有趣的例子
12.7.4 改變位置--創造一個繞著圓圈旋轉的文字
12.7.5 編輯控制及其範例
12.7.6 改變樣式及其範例
12.7.7 改變行為
12.8 XML DOM
12.8.1 什麼是XML DOM
12.8.2 如何使用XML DOM--一個利用XML實現多層關聯下拉選擇框的範例
12.9 總結
第13章 事件處理
13.1 什麼是事件
13.1.1 訊息與事件回應
13.1.2 瀏覽器的事件驅動機制
13.2 基本事件處理
13.2.1 事件和事件類型
13.2.2 事件的綁定
13.2.3 直接呼叫事件處理函數
13.2.4 事件處理函數的回傳值
13.2.5 帶參數的事件回應及其範例
13.2.6 “this”關鍵字
13.3 標準事件模型
13.3.1 起泡與捕捉--瀏覽器的事件傳播
13.3.2 事件處理函數的註冊
13.3.3 把物件註冊為事件處理程序
13.3.4 事件模組與事件類型
13.3.5 關於Event介面
13.3.5.1 Event介面的屬性與方法
13.3.5.2 UIEvent介面的屬性
13.3.5.3 MouseEvent介面的屬性
13.3.5.4 MutationEvent介面
13.3.6 混合事件模型
13.3.7 合成事件
13.4 瀏覽器的事件處理模型實作
13.4.1 Internet Explorer事件模型
13.4.1.1 關於IE事件註冊
13.4.1.2 IE Event物件的屬性
13.4.1.3 IE中的事件起泡
13.4.2 Netscape 4事件模型
13.4.2.1 Netscape 4中的事件捕捉及其範例
13.4.2.2 Netscape 4 Event物件的屬性
13.5 回呼與使用者自訂事件
13.5.1 事件處理模式--一個實作簡單事件處理模式的範例
13.5.2 使用者事件介面的定義
13.5.3 事件代理與事件註冊--一個實現標準事件介面的範例
13.5.4 標準模式--事件分派與接收
13.6 一個例子--增強資料表
13.6.1 什麼是增強資料表
13.6.2 一個採用兩重table嵌套方式固定表頭的範例
13.6.3 可變列寬的實作
13.6.4 標記行--呈現有別於其他行的背景色
13.6.5 小技巧--將程式碼加入樣式表
13.7 總結
第14章 級聯樣式表
14.1 什麼是級聯樣式表
14.1.1 CSS樣式和樣式表
14.1.2 CSS的標準化
14.1.3 瀏覽器支援的CSS
14.2 JavaScript與CSS
14.2.1 CSS和DOM的關係
14.2.2 CSS和IE的關係
14.2.3 瀏覽器的CSS相容性
14.3 控制CSS改變頁面樣式
14.3.1 實現結構與表現的分離及其範例
14.3.2 使用JwaScript和CSS實現頁面多種風格的即時替換
14.4 總結
第15章 資料儲存的腳本化
15.1 什麼是cookie
15.1.1 瀏覽器和客戶端cookie
15.1.2 cookie的屬性
15.2 cookie的客戶端存取
15.2.1 cookie的儲存
15.2.2 cookie的讀取
15.3 cookie的限制
15.4 cookie範例--讓問候更加溫暖
15.5 cookie物件的封裝
15.6 什麼是userData
15.6.1 瀏覽器和客戶端userData
15.6.2 userData的宣告
15.6.3 userData的屬性與方法
15.7 userData的客戶端存取
15.7.1 userData的儲存與讀取
15.7.2 userData的安全性
15.8 userData的限制
15.9 userData與cookie的比較
15.10 userData範例--一個利用userData實作客戶端保存表單資料的範例
15.11 總結
第四部分 資料互動
第16章 同步與非同步
16.1 什麼是同步和非同步
16.2 超時設定和時間間隔
16.3 定時器使用--偵聽與攔截
16.3.1 標準模式--監視器及其範例
16.3.2 使用定時器時應注意的問題
16.4 一個例子--漂亮的Web時鐘
16.4.1 什麼是Web時鐘?
16.4.2 最簡單的Web時脈
16.4.3 Web時脈的設計
16.4.4 完整的Web時脈原始碼
16.5 總結
第17章 XML DOM和XML HTTP
17.1 什麼是XML DOM物件
17.1.1 XML DOM簡介
17.1.2 瀏覽器支援的XML DOM介面
17.1.2.1 XML DOM標準介面
17.1.2.2 IE的XML DOM元件
17.1.2.3 操作XML文件--一個使用MSXML操作XML文件的範例
17.2 XML DOM的版本相容性--XML DOM的跨瀏覽器應用程式
17.3 XML DOM的錯誤處理
17.3.1 處理錯誤訊息的ParseError物件
17.3.2 包含錯誤訊息的文檔
17.4 XML DOM操作XML文件
17.4.1 訪問節點
17.4.2 建立新節點
17.4.3 移動和修改節點及其範例
17.4.4 讀寫節點屬性與讀寫資料
17.4.5 儲存文件
17.5 一個例子--JavaScript棋譜閱讀器(二)
17.5.1 用XML描述棋譜
17.5.2 將XML棋譜轉換為SGF棋譜
17.6 什麼是XML HTTP物件
17.6.1 XML HTTP物件簡介
17.6.2 瀏覽器支援的XML HTTP物件
17.7 透過XML HTTP發送請求
17.7.1 建立連線
17.7.2 發送請求
17.8 讀取並設定HTTP頭
17.8.1 什麼是HTTP頭
17.8.2 讀取並設定HTTP頭
17.9 伺服器應答
17.9.1 同步和非同步應答及其範例
17.9.2 包含應答文字內容的ResponseText 和ResponseXML
17.10 總結
第18章 Ajax簡介
18.1 什麼是Ajax
18.1.1 Ajax並不神秘
18.1.2 Ajax的應用場景
18.1.3 Ajax的競爭對手--其他替代技術
18.2 Ajax初探--我的第一個Ajax程式
18.2.1 從常規應用開始--一個簡單的即時聊天室
18.2.2 討厭的頁面刷新
18.2.3 無刷新解決方案--改進的聊天室
18.2.4 非同步工作--遲滯感的解決方案
18.3 Ajax原理剖析
18.3.1 XML HTTP即時通訊及一個簡單封裝了AjaxProxy物件的範例
18.3.2 資料動態顯示--Ajax改善互動體驗的重要特點
18.3.3 發揮XML的能力
18.3.4 用JavaScript綁定一切
18.3.5 應用背後的標準
18.4 Ajax範例--即時聊天工具
18.4.1 什麼是即時聊天工具
18.4.2 需求分析--即時聊天功能的實作重點
18.4.3 系統實作--即時聊天功能的實作
18.4.4 小結
18.5 總結
第19章 標準與相容性
19.1 標準化組織
19.1.1 W3C和DOM標準
19.1.2 ECMA和JavaScript標準
19.1.3 網路標準
19.2 平台和瀏覽器的兼容性
19.2.1 最小公分母法
19.2.2 防禦性編碼
19.2.3 客戶端探測器
19.2.4 特性偵測
19.2.5 實現標準
19.2.6 適度停止運轉
19.3 語言版本的兼容性
19.3.1 language屬性
19.3.2 版本測試
19.4 如何實作跨瀏覽器應用程式
19.4.1 取捨--劃定支援範圍
19.4.2 基礎模組設計--獨立相容性偵測
19.4.3 劃分運行等級
19.4.4 給予正確的訊息--不要讓你的程式碼保持沉默
19.4.5 充分的應用測試--「相容性魔鬼」總會趁你不注意時「踢你的狗」
19.4.6 靠近標準和就近原則
19.5 展望未來
19.6 總結
第20章 資訊安全
20.1 用戶的隱私資訊
20.2 禁止且受限制的操作
20.2.1 受限制的屬性
20.2.2 受限制的操作
20.2.3 腳本安全等級
20.2.4 腳本偵錯
20.3 警惕幕後的攻擊者
20.3.1 攻擊的手段
20.3.2 隱匿的資料流
20.3.3 頁面偽裝
20.3.4 發現蛛絲馬跡
20.3.5 防範的手段
20.3.5.1 傳輸資料的加密
20.3.5.2 對使用者隱藏原始碼
20.4 同源策略
20.4.1 什麼是同源策略
20.4.2 同源策略的利弊
20.4.3 突破同源策略
20.5 安全區與簽章腳本
20.5.1 可設定的安全性策略方案
20.5.2 Internet Explorer的安全區
20.5.3 Netscape的簽章腳本
20.6 程式碼本身的安全性--加密與混淆
20.6.1 為什麼要加密與混淆
20.6.2 客戶端的加密技術及其範例
20.6.3 程式碼混淆原理
20.6.4 JavaScript程式碼混淆工具--一個程式碼混淆演算法的範例
20.6.5 加密與混淆的結合使用
20.7 總結
第五部分 超越JavaScript
第21章 物件導向
21.1 什麼物件導向
21.1.1 類別與物件
21.1.2 公有與私有--屬性的封裝
21.1.3 屬性與方法的型別
21.2 神奇的prototype
21.2.1 什麼是prototype
21.2.2 prototype的使用技巧
21.2.2.1 為原型物件新增屬性
21.2.2.2 有預設值的Point物件
21.2.2.3 delete操作將物件屬性恢復為預設值
21.2.2.4 使用prototype巧設getter
21.2.2.5 delete操作恢復原型屬性的可見性
21.2.2.6 使用prototype建立大量副本
21.2.2.7 使用prototype定義靜態方法
21.2.3 prototype的實質及其範例
21.2.4 prototype的價值與限制
21.3 繼承與多型態
21.3.1 什麼是繼承
21.3.2 實作繼承的方法
21.3.2.1 建構繼承法及其範例
21.3.2.2 原型繼承法及其範例
21.3.2.3 實例繼承法及其範例
21.3.2.4 拷貝繼承法及其範例
21.3.2.5 幾種繼承法的比較
21.3.2.6 混合繼承法及其範例
21.3.3 單繼承與多重繼承
21.3.4 介面及其實作
21.3.5 多態及其實作
21.4 建構與析構
21.4.1 建構子
21.4.2 多重建構
21.4.3 析構
21.5 疑團! 「this」迷宮
21.5.1 無數個陷阱--令人困擾的「this」謎團
21.5.1.1 this代名詞的運用
21.5.1.2 this「陷阱」
21.5.1.3 this代名詞的非同步問題
21.5.2 偷梁換柱--不好的使用習慣
21.5.3 非同步呼叫--誰動了我的「this」
21.5.4 揭開真相--JavaScript的「this」本質
21.5.5 困難不再--利用閉包修正「this」引用
21.6 包裝物件
21.6.1 區分值與引用
21.6.2 裝箱與拆箱
21.7 元類,類的模板
21.7.1 什麼是元類別
21.7.2 元類別--建構類別的類別
21.7.3 為什麼要用元類別
21.7.4 類別工廠
21.7.4.1 什麼是類別工廠
21.7.4.2 為什麼要建立類別工廠
21.8 誰是造物主
21.8.1 萬物適用的準則
21.8.2 抽象的極致--一個抽像模式的例子
21.8.3 返璞歸真,同源架構
21.9 總結
第22章 閉包與函數式程式設計
22.1 動態語言與閉包
22.1.1 動態語言
22.1.2 語法域和執行域
22.1.3 JavaScript的閉包--一個體現閉包本質的範例
22.2 閉包的特徵與形式
22.2.1 閉包的內在--自治的領域
22.2.2 存取外部環境--一個用閉包改變外部環境的範例
22.2.3 閉包與物件導向
22.2.4 其他形式的閉包
22.3 不適合使用閉包的場合
22.4 函數式程式設計
22.4.1 什麼是函數式程式設計
22.4.1.1 函數是第一型
22.4.1.2 閉包與函數式程式設計
22.4.1.3 科里化(Currying)--一個有趣的概念
22.4.1.4 延遲求值與延續--一個Fibonacci無窮數列的例子
22.4.2 函數式程式設計、公式化與數學模型--一個拋物線方程式的範例
22.4.3 函數式程式設計的優點
22.4.3.1 單元測試方面的優點
22.4.3.2 調試方面的優點
22.4.3.3 並行方面的優點
22.4.3.4 程式碼熱部署方面的優點
22.4.3.5 機器輔助的推理與最佳化
22.4.4 函數式程式設計的缺點
22.4.4.1 閉包的副作用
22.4.4.2 遞歸的形式
22.4.4.3 延遲求值的副作用
22.5 閉包與物件導向
22.5.1 私有域
22.5.2 名字空間管理
22.5.3 友元--一個非常有趣的概念
22.6 Python風格的JavaScript程式碼
22.6.1 最簡約程式碼
22.6.2 輕量級重用
22.6.2.1 JSON
22.6.2.2 Functional
22.6.2.3 迭代函數--一個Array迭代函數的範例
22.6.3 模組管理及其範例
22.7 總結
第23章 模組級管理
23.1 模組化管理
23.1.1 模組化--程式碼的重用
23.1.2 JavaScript的模組管理
23.2 開放封閉原則與面向介面
23.2.1 開放封閉原則
23.2.2 面向介面
23.3 名字空間管理
23.3.1 什麼是名字空間
23.3.2 為什麼要用名字空間
23.3.3 JavaScript的名字空間管理
23.4 呼叫依賴
23.4.1 模組的依賴性
23.4.2 模組依賴的管理
23.5 用程式碼管理程式碼
23.5.1 運行時環境的管理
23.5.2 託管程式碼--一個簡單的託管程式碼「容器」
23.5.3 一個完整的程式碼管理容器
23.6 總結
第24章 動態建構
24.1 讓程式碼去寫程式碼
24.1.1 腳本的動態解析
24.1.2 文法擴充--創造屬於自己的語言
24.2 “發明”語法
24.2.1 正規表示式和語法解析及範例
24.2.2 一個簡單的語法解析器實作
24.2.2.1 什麼是JavaScript 2.0語法
24.2.2.2 JavaScript 2.0語法的部分關鍵特性實作
24.3 實作自己的方言--LispScript
24.3.1 從JavaScript到Lisp
24.3.2 最初的工作--一般JavaScript程式碼
24.3.3 公理,表達式
24.3.4 函數式程式設計的七條基本公設
24.3.4.1 “引用”公設
24.3.4.2 “原子”公設
24.3.4.3 “等值”公設
24.3.4.4 “表頭”公設
24.3.4.5 「餘表」公設
24.3.4.6 “和表”公設
24.3.4.7 「條件」公設
24.3.5 函數文法
24.3.6 使用LispScript定義新函數
24.3.7 一個驚喜--_eval
24.3.8 其他的擴充
24.3.9 小結
24.3.10 運行環境與程式碼容器-看看「新發明」的LispScript的實際表現
24.4 總結
第25章 執行效率
25.1 為什麼要討論執行效率
25.1.1 來自客戶的抱怨--JavaScript能有多慢
25.1.2 程式碼慢下來是誰的錯
25.2 封閉的代價 ###
25.2.1 過度封裝的效能問題
25.2.2 資訊隱藏的利弊
25.2.3 建構物件的開銷
25.3 盒子裡的流火
25.3.1 DOM的記憶體開銷
25.3.2 瀏覽器的記憶體管理
25.3.3 看清一個事實--記憶體洩漏的存在
25.3.4 注意--及時關閉你的「盒子」
25.3.5 一些誤會的澄清
25.3.5.1 腳本動態建立DOM導致記憶體洩漏
25.3.5.2 閉包導致記憶體洩漏
25.4 動態--魔鬼與天使
25.4.1 動態解析的效能分析--一個動態特性的效率測試
25.4.2 開發效率與執行效率--永遠的困難選擇
25.4.3 優美與適用--學會經受魔鬼的誘惑
25.4.4 扮演客戶眼中的天使
25.5 讓程式碼輕舞飛揚
25.5.1 簡單就是美麗--為程式碼瘦身
25.5.2 最完美的運用是不用
25.5.3 高度抽象化是為了簡化問題
25.5.4 邏輯和表達同樣重要
25.5.5 保持程式碼的嚴謹
25.5.6 漂亮的書寫風格--讓閱讀者心情愉快
25.6 總結
第26章 應用框架
26.1 應用框架概覽
26.1.1 什麼是應用框架
26.1.2 應用框架的組成部分
26.1.2.1 類別庫
26.1.2.2 核心模組
26.1.2.3 環境配置
26.1.2.4 使用手冊
26.2 為什麼要設計應用框架
26.2.1 應用框架的適用範圍
26.2.2 應用框架的優缺點
26.3 如何設計應用框架
26.3.1 把握設計的目標
26.3.2 應用框架的設計準則
26.3.3 什麼樣的應用架構才是成熟的應用架構
26.3.4 應用框架的設計方法
26.3.5 實戰!設計一個簡單的應用框架
26.3.5.1 自我描述
26.3.5.2 基礎介面與語意型程式碼
26.3.5.3 核心物件的原型擴充
26.3.5.4 簡單方法
26.3.5.5 名字空間
26.3.5.6 支援標準與跨瀏覽器
26.3.5.7 事件模型--Silverna的事件模型
26.3.5.8 應用模式
26.3.5.9 提供Ajax元件
26.3.5.10 記憶體管理和其他
26.4 框架的實際應用--在Silverna 2.0框架上開發的Widgets
26.5 已存在的應用框架
26.5.1 Prototype
26.5.2 JQuery
26.5.3 Dojo
26.5.4 JSVM
26.5.5 其他框架
26.5.5.1 Bindows(成立於2003年)
26.5.5.2 BackBase (成立於2003年)
26.5.5.3 DOJO (開發中,成立於2004年9月)
26.5.5.4 Open Rico(開發中,成立於2005年5月,基於早期的一個proprietary框架)
26.5.5.5 qooxdoo (開發中,成立於2005年5月)
26.5.5.6 Tibet (開發中,創建於2005年6月)
26.5.5.7 AJFORM (創建於2005年6月)
26.6 總結