一、首先要明確:
1、誰最終調(diào)用函數(shù),this指向誰。
2、this指向的永遠只可能是對象!
3、this指向誰永遠不取決于this寫在哪,而取決于函數(shù)在哪里調(diào)用!
4、this指向的對象,我們稱之為函數(shù)的上下文context,也叫做函數(shù)的調(diào)用者是誰!
二、this指向的規(guī)律(與函數(shù)調(diào)用的方式息息相關(guān))
this指向的情況取決于函數(shù)調(diào)用的方式有哪些(總結(jié)如下):
1、通過函數(shù)名()直接調(diào)用--this 指向window;
function func(){ console.log(this); } func();
2、通過對象.函數(shù)名()調(diào)用的--this指向這個對象
狹義對象: this指向--obj
var obj={ name:"obj", func1:func }; obj.func1();
廣義對象: this指向--div
document.getElementById("div").onclick=function(){this.style.backgroundColor="red";}
3、this指向——數(shù)組arr
var arr=[func,1,2,3]; arr[0]();
4、函數(shù)作為window內(nèi)置函數(shù)的回調(diào)函數(shù)調(diào)用,this指向window setInterval,setTimout等
setInterval(func,1000); setTimeout(func,1000)
5、函數(shù)作為構(gòu)造函數(shù),用new關(guān)鍵字調(diào)用時:this指向新定義的對象obj
var obj=new func();
6、通過call、apply、bind調(diào)用,this指向我們規(guī)定的對象。
Func.call(obj,參數(shù)一,參數(shù)2,參數(shù)3.。。。)
Func.allply(obj,[ 參數(shù)一,參數(shù)2,參數(shù)3.。。。])
Func.bind(obj)( 參數(shù)一,參數(shù)2,參數(shù)3) var f = func.bind(obj). f(…….);