關於普通函式this指向

2022-08-29 21:54:22 字數 1543 閱讀 1469

this的指向在函式定義的時候是確定不了的,只有函式執行的時候才能確定this到底指向誰,實際上this的最終指向的是那個呼叫它的物件(這句話不那麼嚴謹,作為一般情況下是可以的)

section1:如果乙個函式中有this,但是它沒有被上一級的物件所呼叫,那麼this指向的就是window,這裡需要說明的是在js的嚴格版中this指向的不是window,但是我們這裡不**嚴格版的問題(在嚴格版中的預設的this不再是window,而是undefined。)

function dog()

dog(); //相當於window.a();

//this最終指向的是呼叫它的物件,這裡的函式a實際是被window物件所點出來的

var dog = 

}}dog.fn(); //this執行時被它的上一級物件dog呼叫

var dog = 

},fn1:function()

}dog.fn1();

dog.b.fn();

另外還有兩種種特殊情況:

第一種:當this遇到return

function fn()  

; }

var a = new fn;

console.log(a.user); //undefined

2.

function fn()  ;}

var a = new fn;

console.log(a.user); //undefined

3.

function fn()  

var a = new fn;

console.log(a.user); //二狗子

4.

function fn()  

var a = new fn;

console.log(a.user); //二狗子

function fn()  

var a = new fn;

console.log(a.user); //二狗子

總結:如果返回值是乙個物件,那麼this指向的就是那個返回的物件,如果返回值不是乙個物件那麼this還是指向函式的例項。

還有一點就是雖然null也是物件,但是在這裡this還是指向那個函式的例項,因為null比較特殊。

第二種:

var dog = 

}}var j = o.b.fn;

j();

這裡this指向的是window,是不是有些蒙了?其實是因為你沒有理解一句話,這句話同樣至關重要。

this永遠指向的是最後呼叫它的物件,也就是看它執行的時候是誰呼叫的,例子4中雖然函式fn是被物件b所引用,但是在將fn賦值給變數j的時候並沒有執行所以最終指向的是window

箭頭函式 普通函式中的this指向

this指向在箭頭函式和普通函式中的表現是不同的。1 箭頭函式 首先要明白的是箭頭函式的this指標是固定的,就是箭頭函式被定義時其所在環境的物件 因為箭頭函式其實自己是沒有this指標的,其this指標是判定了其直接外層的函式的this指標 這裡說的是函式而不是物件,因為物件不直接形成單獨的作用域...

普通函式 與 箭頭函式 this指向問題

讓我們先講下箭頭函式的this指向,再在普通函式的例子中具體對比。箭頭函式的this與誰呼叫無關,this指向執行上下文。執行上下文可以理解為當前 的執行環境。箭頭函式本身所在的物件為obj,而obj的執行上下文是window,因此輸出的是20。const obj var a 20 console....

this的指向 普通函式 建構函式 call

在建構函式中,this指向例項物件,普通函式中,this指向它的呼叫者,誰呼叫這個函式,this就是誰 call方法也可以修改this指向 functionfn fn window?上面例子中,是普通函式,沒有呼叫物件,其實呼叫者就是window,所以this指向window var obj new...