js中this的指向

2022-03-13 11:22:36 字數 1203 閱讀 8820

平時用this有些混亂,所以寫個總結。

1、作為函式呼叫,this指向全域性物件

varq ='window'varfunc =functionfunc()//window

2、作為物件的方法呼叫,該物件即為呼叫上下文,this指向該物件。

varq ='window'varfunc =function()varobj =}obj.func()

3、作為構造函式呼叫,建構函式試圖初始化這個新建立的物件,並將這個物件作為其呼叫上下文,this 指向這個新建立的物件。

varq ='window'functionfunc()varobj =newfunc

箭頭函式中this物件就是定義時所在的作用域,也就是說箭頭函式本身沒有this,內部的this就是外層**塊作用域中的this。

1、獨立函式

vara =0vartest =()=>test()//0

該箭頭函式在全域性環境中定義,即this指向window

2、物件的方法

vara =0varobj =}obj.foo()//0即:vara =0varobj =newobjectobj.a =1obj.foo =()=>obj.foo()

如上所示,foo在全域性中定義,所以this指向window,那麼如何使this指向obj?

vara =0functionfoo()returnfunc

}varobj =obj.foo()()//1

func在foo呼叫時定義,此時的foo所在作用域為obj,因此this指向obj

3、建構函式,因箭頭函式沒有this,固不能用作建構函式,否則會報錯

varfoo =()=>varboo =newfoo()//foo is not a constructor

4、bind/call

vara =0varfunc =()=>varobj =func.call(obj)//0

如上:func定義在全域性,因此列印0,同物件方法,我們可以通過如下改寫,列印出1

vara =0varfunc =function()returnboo

}varobj =func.call(obj)()//1

**自:

js中this的指向

lang en charset utf 8 深入理解thistitle head 它代表函式執行時,自動生成的乙個內部物件,只能在函式內部使用。隨著函式使用場合的不同,this的值會發生變化。但是有乙個總的原則,那就是this指的是,呼叫函式的那個物件。demo1 function demo1 呼叫...

js中this的指向

this的指向在函式定義的時候是確定不了的,只有函式執行的時候才能確定this到底指向誰,實際上this的最終指向的是那個呼叫它的物件 functiona a 按照我們上面說的this最終指向的是呼叫它的物件,這裡的函式a實際是被window物件所點出來的,下面的 就可以證明。var o o.fn ...

js中的this指向

首先必須要說的是,this的指向在函式定義的時候是確定不了的,只有函式執行的時候才能確定this到底指向誰,實際上this的最終指向的是那個呼叫它的物件 這句話有些問題,後面會解釋為什麼會有問題,雖然網上大部分的文章都是這樣說的,雖然在很多情況下那樣去理解不會出什麼問題,但是實際上那樣理解是不準確的...