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...