簡單明瞭不廢話, Javascript函數中的this的指向規則

  1. 用new調用函數, this指向新創建的對象。

  2. 使用call,apply(bind)調用函數, this指向綁定的的對象。

  3. 函數作爲某對象的屬性調用, this指向這個對象。

  4. 其他情況下, this指向全局對象(嚴格模式下指向undefined)。

補充: 如果第二條規則綁定的是null或者undefined, 則執行第四條規則; 1-4條規則優先級遞減。

var a = 1;
var foo1 = {
  a: 2,
  bar: function(){
    console.log(this.a)
  }
};
var foo2 = {
  a: 3
};
var baz = foo1.bar;
baz() // 1 規則4
foo1.bar() // 2 規則3
foo1.bar.call(foo2) // 3 規則2>規則3
new foo1.bar() // undefined 規則1>規則3

var baz2 = foo1.bar.bind(foo2);
new baz2() // undefined 規則1>規則2

foo1.bar.call(null) // 1 this指向global

參考:You Don't Know JS: this & Object Prototypes

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章