首先,請(qǐng)牢記以下三點(diǎn)
1. this指向的,只可能是對(duì)象!
2.this指向誰(shuí),不取決于this寫(xiě)在哪!而是取決于函數(shù)在哪里進(jìn)行調(diào)用。
3.this指向的對(duì)象,稱(chēng)之為函數(shù)的上下文context,也叫函數(shù)的調(diào)用者。
看一下具體的情況
1.通過(guò)函數(shù)名直接調(diào)用:this指向window
function funA(){
console.log(this);
}
// 通過(guò)函數(shù)名直接調(diào)用:this指向window
funA(); // this--->window

通過(guò)函數(shù)名直接調(diào)用
2.函數(shù)作為某個(gè)數(shù)組中的一個(gè)元素,通過(guò)數(shù)組下標(biāo)進(jìn)行調(diào)用:this指向這個(gè)數(shù)組,以上面的函數(shù)為例。
function funA(){
console.log(this);
}
var arr = [funA,1,2,3];
arr[0](); // this--->arr

通過(guò)數(shù)組下標(biāo)進(jìn)行調(diào)用
3.通過(guò)對(duì)象.函數(shù)名調(diào)用的:this指向這個(gè)對(duì)象
function funA() {
console.log(this)
}
var obj = {
name: "obj",
funA: funA
};
obj.funA(); // this--->obj

通過(guò)對(duì)象進(jìn)行調(diào)用
4.通過(guò)DOM事件進(jìn)行的調(diào)用,this指向頁(yè)面中調(diào)用它的元素
假設(shè)頁(yè)面中有一個(gè)id為div的元素
var div = document.getElementById('div')
div.onclick = function () {
console.log(this)
}

事件進(jìn)行的調(diào)用
5.函數(shù)作為window內(nèi)置函數(shù)的回調(diào)函數(shù)調(diào)用:this指向window( 如setInterval setTimeout 等)
function funA() {
console.log(this)
}
setTimeout(funA,1000);// this--->window

回調(diào)函數(shù)調(diào)用
6.函數(shù)作為構(gòu)造函數(shù),用new關(guān)鍵字調(diào)用時(shí):this指向新new出的函數(shù)。
function funA() {
this.name = 'funA'
console.log(this.name)
}
var obj = {
name:'name',
fun:new funA(),
}
console.log(obj)

new關(guān)鍵字
上面是本人對(duì)于this指向的一些理解,如有錯(cuò)誤或不足,望指出。