File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 3232### 安全上的顧慮
3333
3434` eval ` 同樣有安全上的問題,因為所有的程式碼都可以被直接執行。
35- 而他不應去執行一串未知的字串或是來自不幸任的來源 。
35+ 而他不應去執行一串未知的字串或是來自不信任的來源 。
3636
3737### 結語
3838
Original file line number Diff line number Diff line change 2525
2626由於 ` var ` 已經宣告變數 ` foo ` 在所有的程式碼執行之前。
2727所以 ` foo ` 已經在程式運行前就已經被定義過了。
28- 但是因為賦值只會在運行時去職情 ,所以在程式碼執行前,` foo ` 的值還沒被宣告所以為 [ undefined] ( #core.undefined ) 。
28+ 但是因為賦值只會在運行時去執行 ,所以在程式碼執行前,` foo ` 的值還沒被宣告所以為 [ undefined] ( #core.undefined ) 。
2929
3030
3131### 命名函式的賦值表達式
3232
33- 另一個特殊狀況就勢將一個命名函式賦值給一個變數 。
33+ 另一個特殊狀況是將一個命名函式賦值給一個變數 。
3434
3535 var foo = function bar() {
3636 bar(); // 可以運行
3737 }
3838 bar(); // 錯誤:ReferenceError
3939
40- ` bar ` 不可以在外部的區域被執行,因為它只有在 ` foo ` 的函式內才可以去執行 。
40+ ` bar ` 不可以在外部的區域被執行,因為它只有在 ` foo ` 的函式內才可以執行 。
4141然而在 ` bar ` 內部還是可以看見。這是由於 JavaScript的 [ 命名處理] ( #function.scopes ) 所致。
42- 函式名在函式內 * 都* 可以去使用 。
42+ 函式名在函式內 * 都* 可以使用 。
4343
Original file line number Diff line number Diff line change 11## ` this ` 的工作原理
22
33JavaScript 有移到完全部屬於其他語言處理 ` this ` 的處理機制。
4- 在 ** 五** 種物同的情況下 , ` this ` 指向的個不相同
4+ 在 ** 五** 種不同的情況下 , ` this ` 指向的各不相同
55
66### 全域變數
77
@@ -14,12 +14,12 @@ JavaScript 有移到完全部屬於其他語言處理 `this` 的處理機制。
1414
1515 foo();
1616
17- 這裡 ` this ` 也會指向 * 全域* 對象 。
17+ 這裡 ` this ` 也會指向 * 全域* 物件 。
1818
1919> ** ES5 注意:** 在嚴格模式下,不存在全域變數。
2020> ` this ` 將會是 ` undefined ` 。
2121
22- ### 方法調用
22+ ### 呼叫一個方法
2323
2424 test.foo();
2525
Original file line number Diff line number Diff line change 2727 }
2828
2929這個版本的程式碼是唯一正確的寫法。由於我們使用了 ` hasOwnProperty ` ,這次 ** 只** 輸出 ` moo ` 。
30- 如果不只用這個程式碼在原型物件中 (比如 ` Object.prototype ` )被擴展可能會出錯。
30+ 如果不使用這個程式碼在原型物件中 (比如 ` Object.prototype ` )被擴展可能會出錯。
3131
32- 一個廣泛的模組 [ Prototype] [ 1 ] 就礦展了圓型的 JavaScript 物件。
33- 因此,但這模組包含在頁面中時 ,不使用 ` hasOwnProperty ` 過濾的 ` for in ` 尋難免會出問題 。
32+ 一個廣泛使用的舊函式庫 [ Prototype] [ 1 ] 就擴展了原型的 JavaScript 物件。
33+ 因此,當這個函式庫包含在頁面中時 ,不使用 ` hasOwnProperty ` 過濾的 ` for in ` 迴圈難免會出問題 。
3434
3535### 總結
3636
Original file line number Diff line number Diff line change 11## ` hasOwnProperty `
22
3- 為了判斷一個物件是否包含 * 自定義* 屬性而 * 不是* [ 原形 ] ( #object.prototype ) 上的屬性,我們需要使用繼承 ` Object.prototype ` 的 ` hasOwnProperty ` 方法。
3+ 為了判斷一個物件是否包含 * 自定義* 屬性而 * 不是* [ 原型 ] ( #object.prototype ) 上的屬性,我們需要使用繼承 ` Object.prototype ` 的 ` hasOwnProperty ` 方法。
44
55> ** 注意:** 判斷一個屬性是否 ` undefined ` 是 ** 不夠的** 。
66> 因為一個屬性可能存在,但是它的值被設成 ` undefined ` 。
@@ -42,4 +42,4 @@ JavaScript **不會** 保護 `hasOwnProperty`被占用,因此如果碰到存
4242
4343當檢查一個物件是否存在的時候, ` hasOwnProperty ` 是 ** 唯一** 可用的方法。
4444同時在使用 [ ` for in loop ` ] ( #object.forinloop )
45- 建議使用 ` hasOwnProperty ` 避免 [ 原型] ( #object.prototype ) 所帶來的干擾。
45+ 建議使用 ` hasOwnProperty ` 避免 [ 原型] ( #object.prototype ) 所帶來的干擾。
Original file line number Diff line number Diff line change @@ -72,14 +72,14 @@ JavaScript 不包含傳統繼承的模型,它使用的是*原型*模型。
7272
7373一個經常發生的錯誤,那就是擴展 ` Object.prototype ` 或者是其他內建類型的原型物件。
7474
75- 這種技術叫做 [ monkey patching] [ 1 ] 並且會破壞 * 封裝* 。雖然被廣泛的應用到一些 Javascript 的架構,像是 [ Prototype] ( http://prototypejs.org ) , 但仍然沒有好的理由新增一個 * 非標準* 的功能去搞亂內建型別
75+ 這種技術叫做 [ monkey patching] [ 1 ] 並且會破壞 * 封裝* 。雖然被廣泛的應用到一些 Javascript 的架構,像是 [ Prototype] ( http://prototypejs.org ) , 但仍然沒有好的理由新增一個 * 非標準* 的功能去搞亂內建型別。
7676
7777擴展內置類型的 ** 唯一** 理由是為了和新的 JavaScript 保持一致,比如說 [ ` Array.forEach ` ] [ 3 ]
7878
7979### 總結
8080
8181在寫複雜的程式碼的時候,要 ** 充分理解** 所有程式繼承的屬性還有原型鏈。
82- 還要堤防原型鏈過長帶來的性能問題 ,並知道如何通過縮短原型鏈來提高性能。
82+ 還要提防原型鏈過長帶來的性能問題 ,並知道如何通過縮短原型鏈來提高性能。
8383絕對 ** 不要使用** ` native prototype ` 除非是為了和新的 JavaScript 引擎作兼容。
8484
8585[ 1 ] : http://en.wikipedia.org/wiki/Monkey_patch
You can’t perform that action at this time.
0 commit comments