1. 程式人生 > >10th week blog

10th week blog

一:object and constructor comprison

物件字面量執行速度更快,因為它們可以在解析的時候被優化:它們不需要"作用域解析(scope resolution)";因為存在我們建立了一個同名的建構函式Object()的可能,當我們呼叫Object()的時候,解析器需要順著作用域鏈從當前作用域開始查詢,如果在當前作用域找到了名為Object()的函式就執行,如果沒找到,就繼續順著作用域鏈往上照,直到找到全域性Object()建構函式為止

  • Object()建構函式可以接收引數,通過這個引數可以把物件例項的建立過程委託給另一個內建建構函式,並返回另外一個物件例項,而這往往不是你想要的。所有事物都是物件:字串、數值、陣列、函式...此外,JavaScript 允許自定義物件。

    在一個類中只能有一個名為 “constructor” 的特殊方法。 一個類中出現多次建構函式 (constructor)方法將會丟擲一個 SyntaxError 錯誤。

    在一個構造方法中可以使用super關鍵字來呼叫一個父類的構造方法。

    如果沒有顯式指定構造方法,則會新增預設的 constructor 方法。

    如果不指定一個建構函式(constructor)方法, 則使用一個預設的建構函式(constructor)。

  • 例項:
  • class Square extends Polygon { constructor(length) { // 在這裡, 它呼叫了父類的建構函式, 並將 lengths 提供給 Polygon 的"width"和"height" super(length, length); // 注意: 在派生類中, 必須先呼叫 super() 才能使用 "this"。 // 忽略這個,將會導致一個引用錯誤。 this.name = 'Square'; } get area() { return this.height * this.width; } set area(value) { // 注意:不可使用 this.area = value // 否則會導致迴圈call setter方法導致爆棧 this._area = value; }
  • 二:什麼時候用arrange fuction:

功能

編輯 返回一個包含 陣列 Variant 功能: Array( arglist )  所需的 arglist 引數是一個用逗號隔開的值表,這些值用於給 Variant 所包含的陣列的各元素賦值。如果不提供引數,則建立一個長度為 0 的陣列。 語法: 用來表示 陣列元素的符號由變數名、圓括號以及括號中的所需元素的索引號組成。在下面的示例中,第一條 語句建立一個  Variant 
的變數 A。第二條語句將一個數組賦給變數 A。最後一條語句將該陣列的第二個元素的值賦給另一個變數。
Dim A As VariantA = Array(10,20,30)B = A(2)使用  Array 函式建立的陣列的下界受 Option Base 語句指定的下界的決定, 除非 Array 是由型別庫(例如 VBA.Array )名稱限定。如果是由型別庫名稱限定,則 Array 不受 Option Base 的影響。 注意  沒有作為陣列宣告的 Variant 也可以表示陣列。 除了長度固定的字串以及使用者定義型別之外, Variant 變數可以表示任何型別的陣列。儘管一個包含陣列的  Variant 和一個元素為 Variant 型別的陣列在概念上有所不同,但對陣列元素的訪問方式是相同的。 四:scope closure:

2、scope及變數查詢

  作用域,也就是我們常說的詞法作用域,說簡單點就是你的程式存放變數、變數值和函式的地方。

  塊級作用域

  如果你接觸過塊級作用域,那麼你應該非常熟悉塊級作用域。簡單說來就是,花括號{}括起來的程式碼共享一塊作用域,裡面的變數都對內或者內部級聯的塊級作用域可見。

  基於函式的作用域

  在JavaScript中,作用域是基於函式來界定的。也就是說屬於一個函式內部的程式碼,函式內部以及內部巢狀的程式碼都可以訪問函式的變數。

無論函式是在哪裡呼叫,也無論函式是如何呼叫的,其確定的詞法作用域永遠都是在函式被宣告的時候確定下來的。理解這一點非常重要。