File tree Expand file tree Collapse file tree 6 files changed +15
-15
lines changed Expand file tree Collapse file tree 6 files changed +15
-15
lines changed Original file line number Diff line number Diff line change 32
32
### 安全上的顧慮
33
33
34
34
` eval ` 同樣有安全上的問題,因為所有的程式碼都可以被直接執行。
35
- 而他不應去執行一串未知的字串或是來自不幸任的來源 。
35
+ 而他不應去執行一串未知的字串或是來自不信任的來源 。
36
36
37
37
### 結語
38
38
Original file line number Diff line number Diff line change 25
25
26
26
由於 ` var ` 已經宣告變數 ` foo ` 在所有的程式碼執行之前。
27
27
所以 ` foo ` 已經在程式運行前就已經被定義過了。
28
- 但是因為賦值只會在運行時去職情 ,所以在程式碼執行前,` foo ` 的值還沒被宣告所以為 [ undefined] ( #core.undefined ) 。
28
+ 但是因為賦值只會在運行時去執行 ,所以在程式碼執行前,` foo ` 的值還沒被宣告所以為 [ undefined] ( #core.undefined ) 。
29
29
30
30
31
31
### 命名函式的賦值表達式
32
32
33
- 另一個特殊狀況就勢將一個命名函式賦值給一個變數 。
33
+ 另一個特殊狀況是將一個命名函式賦值給一個變數 。
34
34
35
35
var foo = function bar() {
36
36
bar(); // 可以運行
37
37
}
38
38
bar(); // 錯誤:ReferenceError
39
39
40
- ` bar ` 不可以在外部的區域被執行,因為它只有在 ` foo ` 的函式內才可以去執行 。
40
+ ` bar ` 不可以在外部的區域被執行,因為它只有在 ` foo ` 的函式內才可以執行 。
41
41
然而在 ` bar ` 內部還是可以看見。這是由於 JavaScript的 [ 命名處理] ( #function.scopes ) 所致。
42
- 函式名在函式內 * 都* 可以去使用 。
42
+ 函式名在函式內 * 都* 可以使用 。
43
43
Original file line number Diff line number Diff line change 1
1
## ` this ` 的工作原理
2
2
3
3
JavaScript 有移到完全部屬於其他語言處理 ` this ` 的處理機制。
4
- 在 ** 五** 種物同的情況下 , ` this ` 指向的個不相同
4
+ 在 ** 五** 種不同的情況下 , ` this ` 指向的各不相同
5
5
6
6
### 全域變數
7
7
@@ -14,12 +14,12 @@ JavaScript 有移到完全部屬於其他語言處理 `this` 的處理機制。
14
14
15
15
foo();
16
16
17
- 這裡 ` this ` 也會指向 * 全域* 對象 。
17
+ 這裡 ` this ` 也會指向 * 全域* 物件 。
18
18
19
19
> ** ES5 注意:** 在嚴格模式下,不存在全域變數。
20
20
> ` this ` 將會是 ` undefined ` 。
21
21
22
- ### 方法調用
22
+ ### 呼叫一個方法
23
23
24
24
test.foo();
25
25
Original file line number Diff line number Diff line change 27
27
}
28
28
29
29
這個版本的程式碼是唯一正確的寫法。由於我們使用了 ` hasOwnProperty ` ,這次 ** 只** 輸出 ` moo ` 。
30
- 如果不只用這個程式碼在原型物件中 (比如 ` Object.prototype ` )被擴展可能會出錯。
30
+ 如果不使用這個程式碼在原型物件中 (比如 ` Object.prototype ` )被擴展可能會出錯。
31
31
32
- 一個廣泛的模組 [ Prototype] [ 1 ] 就礦展了圓型的 JavaScript 物件。
33
- 因此,但這模組包含在頁面中時 ,不使用 ` hasOwnProperty ` 過濾的 ` for in ` 尋難免會出問題 。
32
+ 一個廣泛使用的舊函式庫 [ Prototype] [ 1 ] 就擴展了原型的 JavaScript 物件。
33
+ 因此,當這個函式庫包含在頁面中時 ,不使用 ` hasOwnProperty ` 過濾的 ` for in ` 迴圈難免會出問題 。
34
34
35
35
### 總結
36
36
Original file line number Diff line number Diff line change 1
1
## ` hasOwnProperty `
2
2
3
- 為了判斷一個物件是否包含 * 自定義* 屬性而 * 不是* [ 原形 ] ( #object.prototype ) 上的屬性,我們需要使用繼承 ` Object.prototype ` 的 ` hasOwnProperty ` 方法。
3
+ 為了判斷一個物件是否包含 * 自定義* 屬性而 * 不是* [ 原型 ] ( #object.prototype ) 上的屬性,我們需要使用繼承 ` Object.prototype ` 的 ` hasOwnProperty ` 方法。
4
4
5
5
> ** 注意:** 判斷一個屬性是否 ` undefined ` 是 ** 不夠的** 。
6
6
> 因為一個屬性可能存在,但是它的值被設成 ` undefined ` 。
@@ -42,4 +42,4 @@ JavaScript **不會** 保護 `hasOwnProperty`被占用,因此如果碰到存
42
42
43
43
當檢查一個物件是否存在的時候, ` hasOwnProperty ` 是 ** 唯一** 可用的方法。
44
44
同時在使用 [ ` 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 不包含傳統繼承的模型,它使用的是*原型*模型。
72
72
73
73
一個經常發生的錯誤,那就是擴展 ` Object.prototype ` 或者是其他內建類型的原型物件。
74
74
75
- 這種技術叫做 [ monkey patching] [ 1 ] 並且會破壞 * 封裝* 。雖然被廣泛的應用到一些 Javascript 的架構,像是 [ Prototype] ( http://prototypejs.org ) , 但仍然沒有好的理由新增一個 * 非標準* 的功能去搞亂內建型別
75
+ 這種技術叫做 [ monkey patching] [ 1 ] 並且會破壞 * 封裝* 。雖然被廣泛的應用到一些 Javascript 的架構,像是 [ Prototype] ( http://prototypejs.org ) , 但仍然沒有好的理由新增一個 * 非標準* 的功能去搞亂內建型別。
76
76
77
77
擴展內置類型的 ** 唯一** 理由是為了和新的 JavaScript 保持一致,比如說 [ ` Array.forEach ` ] [ 3 ]
78
78
79
79
### 總結
80
80
81
81
在寫複雜的程式碼的時候,要 ** 充分理解** 所有程式繼承的屬性還有原型鏈。
82
- 還要堤防原型鏈過長帶來的性能問題 ,並知道如何通過縮短原型鏈來提高性能。
82
+ 還要提防原型鏈過長帶來的性能問題 ,並知道如何通過縮短原型鏈來提高性能。
83
83
絕對 ** 不要使用** ` native prototype ` 除非是為了和新的 JavaScript 引擎作兼容。
84
84
85
85
[ 1 ] : http://en.wikipedia.org/wiki/Monkey_patch
You can’t perform that action at this time.
0 commit comments