默認即約定俗成,this指向全局對象window,嚴格模式下this爲undefined。bash
this.a === window.a // true
函數
var a = 1;
ui
this.a // 1
this
use strict
spa
this === window // false
code
this === undefined // true
對象
顧名思義,隱式綁定大致上能夠理解爲一個對象有一個屬性爲函數,此時這個函數的this指向的是調用它的對象所處的自身,直接上代碼:get
var name = 'windowName'
let obj = {
name: 'name',
getName: function() {
console.log(this.name)
}
};
obj.getName(); // name 此時是obj調用的getName方法,因此this指向obj
let obj2 = obj.getName;
obj2(); // windowName 此時是window調用的obj2方法,因此this指向window,即window.obj2()
複製代碼
var name = 'windowName'
var obj = {
name: 'name',
getName: function() {
return function() {
console.log(this.name)
}
}
};
obj.getName()(); // windowName
var obj2 = obj.getName;
obj2()(); // windowName
複製代碼
原來,obj.getName()返回的是一個functionstring
而function的this指向的是window,因此報出來的是windowName.obj2()it
同理,例一 中的obj2也是同理,obj2 === obj.getName 返回的也是一個function,因此obj2的this指向的也是window
因此我們能夠得出,隱式綁定根據的是調用者的上下文環境。