Skip to content
Ho-Yang Tsai edited this page Oct 16, 2015 · 15 revisions

第二章

for 迴圈

__ Page 17 __

i = i + 1   
i += 1

JSLint 提示你這麼做;原因是他對 ++ 和 -- 提示「過度使用伎倆」(excessive trickiness)。如果你不同意這點,你可以將 JSLint 的設定值 plusplus 設為 false(預設為true)。

第三章

物件實字

__ Page 42 __

Hint 「空白物件(blank object)」和「空物件(empty object)」只是為了簡化,Javascript裡並沒有真正空的物件,即使是最簡單的 {} 物件也會有繼承自Object.prototype的屬性和方法。而「空」物件我們將解釋為,一個物件,除了繼承來的屬性之外沒有自己的屬性。

__ Page 54 __

Javascript 有五種原始型別:數值、字串、布林、null 和 undefined。除了 null 和 undefined 之外,其餘三種型別都有原始型別包裹物件(primitive wrapper objects)。包裹物件可以使用內建的建構式 Number()、String() 和 Boolean()來建立。

原始數值和數值物件的差異,參考下面的範例:

var n = 100;
console.log(typeof n); // "number"

var nobj = new Number(100);
console.log(typeof nobje); // "object"

第四章

函式的 name 屬性

__ Page 62 __

函式宣告式只能出現在「program code」裡面,意思是在函式本體中,或在全域空間中。它門的定義無法賦值給變數或屬性,或作為其他函式的參數。

// 全域作用域
function foo() {}

function local() {
  // 區域作用域
  function bar() {}
  return bar;
}

__ Page 63 __

Hint 技術上是可以將一個具名函式表示式指派給有著另一個名稱的變數,例如:

var foo = function bar() {};   

然後這種方法產生的行為在某些瀏覽器(IE)上未被正確的實作,所以不建議用這種模式。

第五章

method() 方法

__ Page 115 __

對於習慣用 class 思考的程式員,Javascript 可能會讓他們感到困惑,這就是為什麼有些程式員會選擇試圖將 Javascript 編寫的更class-like。Douglas Crockford 所提出的 method() 方法,其概念就是其中一個嘗試。讓 Javascript 變得 class-like 並不是一種推薦的方式,但儘管如此,這還是一種很有趣的模式,可能會在某些應用中碰到。

使用建構式看起來就像在 Java 中使用 class,也讓你可以在建構式本體中,新增實體的屬性到 this。不過,在 this 上新增方法是沒有效率的,因為會造成方法在每個實體上都重新建立,於是浪費更多記憶體。這就是為什麼可重用的方法應新增在建構式的 prototype 屬性中。

https://github.com/hoyangtsai/javascript-patterns/blob/master/ch5-p116-method.js