首先必須要說的是,this的指向在函式定義的時候是確定不了的,只有函式執行的時候才能確定this到底指向誰,實際上this的最終指向的是那個呼叫它的物件
例子1:
按照我們上面說的this最終指向的是呼叫它的物件,這裡的函式a實際是被window物件所點出來的,下面的**就可以證明。functiona(
)a()
;
和上面**一樣吧,其實alert也是window的乙個屬性,也是window點出來的。functiona(
)window.a(
);
這裡的this指向的是物件o,因為你呼叫這個fn是通過o.fn()執行的,那自然指向就是物件o,這裡再次強調一點,this的指向在函式建立的時候是決定不了的,在呼叫的時候才能決定,誰呼叫的就指向誰,一定要搞清楚這個。var o =}o.
fn();
其實例子1和例子2說的並不夠準確,下面這個例子就可以推翻上面的理論。
如果要徹底的搞懂this必須看接下來的幾個例子
這段**和上面的那段**幾乎是一樣的,但是這裡的this為什麼不是指向window,如果按照上面的理論,最終this指向的是呼叫它的物件,這裡先說個而外話,window是js中的全域性物件,我們建立的變數實際上是給window新增屬性,所以這裡可以用window點o物件。var o =
}window.o.fn(
);
這裡同樣也是物件o點出來的,但是同樣this並沒有執行它,那你肯定會說我一開始說的那些不就都是錯誤的嗎?其實也不是,只是一開始說的不準確,接下來我將補充一句話,我相信你就可以徹底的理解this的指向的問題。var o =}}
o.b.fn(
);
情況3:如果乙個函式中有this,這個函式中包含多個物件,儘管這個函式是被最外層的物件所呼叫,this指向的也只是它上一級的物件,例子3可以證明,如果不相信,那麼接下來我們繼續看幾個例子。
儘管物件b中沒有屬性a,這個this指向的也是物件b,因為this只會指向它的上一級物件,不管這個物件中有沒有this要的東西。var o =}}
o.b.fn(
);
this永遠指向的是最後呼叫它的物件,也就是看它執行的時候是誰呼叫的,例子4中雖然函式fn是被物件b所引用,但是在將fn賦值給變數j的時候並沒有執行所以最終指向的是window,這和例子3是不一樣的,例子3是直接執行了fn。var o =}}
var j = o.b.fn;j(
);
this指向的簡單理解
this 本身含義 執行上下文 只能是物件 不是物件強行轉換成物件 this一般存在於函式中,表示當前函式的執行上下文,如果函式沒有被執行,那麼this沒有內容,只有函式在執行後this才有繫結。函式執行的位置 1 預設執行 自己執行自己 fn 預設情況下的隱式執行 this指向window 嚴格模...
this指向自己理解的
關於this,總結起來,主要有以下幾個途徑能夠被運用到。1 物件方法中呼叫this 如果函式被當中物件的乙個方法進行呼叫,則this值指向該物件。var person person.sayname this person,alert welcome alice 在這裡,函式的this指向該物件 即 ...
關於js this指向的理解
var obj add1 function a var f v v this.count return f.call b,a add2 function a var f function v return f.call b,a console.log obj.add 1 2 console.log ...