JS中的this指向問題

2022-05-02 14:30:12 字數 1513 閱讀 7179

關於this的指向,是乙個令人很頭疼的問題。這裡我總結了幾點,看懂這幾點,this指向基本也就沒問題了。

歸根結底,this指向就一句話:誰最終呼叫函式,this指向誰!!!

關於這點,記住這三句:

① this指向的,永遠只可能是物件!

② this指向誰,永遠不取決於this寫在哪!而是取決於函式在哪呼叫。

③ this指向的物件,我們稱之為函式的上下文context,也叫函式的呼叫者。

下面,請看具體情況。

① 通過函式名()直接呼叫:this指向window

function

func()

//① 通過函式名()直接呼叫:this指向window

func(); //

this--->window

② 通過物件.函式名()呼叫的:this指向這個物件

function

func()

//② 通過物件.函式名()呼叫的:this指向這個物件

//狹義物件

var obj =;

obj.func1();

//this--->obj

//廣義物件

document.getelementbyid("div").onclick = function

();

//this--->div

③ 函式作為陣列的乙個元素,通過陣列下標呼叫的:this指向這個陣列

function

func()

//③ 函式作為陣列的乙個元素,通過陣列下標呼叫的:this指向這個陣列

var arr = [func,1,2,3];

arr[0](); //

this--->arr

④ 函式作為window內建函式的**函式呼叫:this指向window(setinterval settimeout 等

function

func()

//④ 函式作為window內建函式的**函式呼叫:this指向window

settimeout(func,1000);//

this--->window

//setinterval(func,1000);

⑤ 函式作為建構函式,用new關鍵字呼叫時:this指向新new出的物件

function

func()

//⑤ 函式作為建構函式,用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...