who is "this"

from Kuro's Blog : What's THIS in JavaScript ? [上]

this 代表的是 function 執行時所屬的『物件』

而在 JavaScript 這個語言內,除了基本型別外的一切,都是「物件」, 所以 function 本身就是物件。

var foo = function() {
  this.count++;
};

foo 是 function(物件),也是「全域變數」。 而全域變數在 JavaScript 當中,其實就是全域物件的屬性。 全域物件在瀏覽器是 window,在 node 內叫做 global。

// 在瀏覽器
window = {
  foo: function() {
    this.count++;
  }    
}

巢狀中的 this

兩個重點:

  • JavaScript 中,用來切分變數的最小作用範圍 (scope),也就是我們說的有效範圍的單位,就是 function。
  • 當沒有特定指明 this 的情況下,預設綁定 (Default Binding) this 為 「全域物件」,也就是 window。
var obj = {
  func1: function(){
    console.log( this === obj );

    var func2 = function(){
      // 沒有特定指明 `this` 的情況下,`this` 預設"綁定" `window`
      console.log( this === obj ); 
    };

    // 因為已被綁定,所以是 window
    func2();
  }
};

obj.func1(); // 值為 function{...}
// true (func1 是 obj 的方法, this = obj)
// false (this 是 window)

http://jsbin.com/guvabak/edit?js,console

應該要有的基本觀念:

  • this 不是 function 本身
  • this 也不是 function 的 scope
  • this 與 function 在"何處被宣告"完全無關,而是取決於 function "被呼叫的方式"
  • this 指的是,當 function 執行時,這個 scope 的 owner
  • 當 function 是某個物件的 method,this 指的就是上層物件
  • 全域變數的上層物件就是 window

results for ""

    No results matching ""