關於this的指向,是乙個令人很頭疼的問題。這裡我總結了幾點,看懂這幾點,this指向基本也就沒問題了。
歸根結底,this指向就一句話:誰最終呼叫函式,this指向誰!!!
關於這點,記住這三句:
① this指向的,永遠只可能是物件!
② this指向誰,永遠不取決於this寫在哪!而是取決於函式在哪呼叫。
③ this指向的物件,我們稱之為函式的上下文context,也叫函式的呼叫者。
下面,請看具體情況。
① 通過函式名()直接呼叫:this指向window
functionfunc()
//① 通過函式名()直接呼叫:this指向window
func(); //
this--->window
② 通過物件.函式名()呼叫的:this指向這個物件
functionfunc()
//② 通過物件.函式名()呼叫的:this指向這個物件
//狹義物件
var obj =;
obj.func1();
//this--->obj
//廣義物件
document.getelementbyid("div").onclick = function
();
//this--->div
③ 函式作為陣列的乙個元素,通過陣列下標呼叫的:this指向這個陣列
functionfunc()
//③ 函式作為陣列的乙個元素,通過陣列下標呼叫的:this指向這個陣列
var arr = [func,1,2,3];
arr[0](); //
this--->arr
④ 函式作為window內建函式的**函式呼叫:this指向window(setinterval settimeout 等)
functionfunc()
//④ 函式作為window內建函式的**函式呼叫:this指向window
settimeout(func,1000);//
this--->window
//setinterval(func,1000);
⑤ 函式作為建構函式,用new關鍵字呼叫時:this指向新new出的物件
functionfunc()
//⑤ 函式作為建構函式,用new關鍵字呼叫時:this指向新new出的物件
var obj = new func(); //
this--->new出的新obj
JS中this指向問題
解析器在呼叫函式時,每次都會向函式內部傳遞進乙個隱含的引數,這個隱含的引數就是this,this指向的是乙個物件,這個物件我們稱之為函式執行的上下文物件,根據函式的呼叫方式不同,this會指向不同的物件.簡單來說一下函式中this指向問題,1.this是什麼?任何函式本質上都是通過某個物件來呼叫的,...
JS中this指向問題
函式內部的this之和函式的呼叫方式有關,和函式的定義方式沒有關係functionfn fn windowvar obj obj.fn obj functionfn 或者可以這樣寫自呼叫函式 functionfn div document.queryselector div div.onclick ...
JS中this指向問題
與其它語言相比,js的this關鍵字的指向稍微有點差別。一 全域性環境 首選我們要明確一點,在全域性環境中 在任意函式體外部 無論是嚴格模式還是非嚴格模式,this都指向window。下面,我們來通過幾個例子理解一下。示例1 console.log this 這裡的this在全域性域下,指向wind...