平時用this有些混亂,所以寫個總結。
1、作為函式呼叫,this指向全域性物件
varq ='window'varfunc =functionfunc()//window2、作為物件的方法呼叫,該物件即為呼叫上下文,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()returnfuncfunc在foo呼叫時定義,此時的foo所在作用域為obj,因此this指向obj}varobj =obj.foo()()//1
3、建構函式,因箭頭函式沒有this,固不能用作建構函式,否則會報錯
varfoo =()=>varboo =newfoo()//foo is not a constructor4、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的最終指向的是那個呼叫它的物件 這句話有些問題,後面會解釋為什麼會有問題,雖然網上大部分的文章都是這樣說的,雖然在很多情況下那樣去理解不會出什麼問題,但是實際上那樣理解是不準確的...