1. 程式人生 > >【JavaScript】函式內的this指向誰

【JavaScript】函式內的this指向誰

首先宣告,this並不需要’查詢’這一個過程,this是在函式呼叫的時候就確定的。

function foo(){}

分別就函式的4中呼叫形式如何確定函式內的this.
1.Function Invocation Pattern
諸如’foo()’這樣直接呼叫的形式,這種模式下,foo函式體中的this永遠為Global物件,在瀏覽器中就是Window物件。

2.Method Invocation Pattern
諸如’foo.bar()’這樣的形式,函式作為屬性來呼叫,必然會有’.’或者’[]’這樣的符號出現,那麼函式中的this就是’.’或者’[‘符號前的物件,foo.bar()則bar函式中的this就是foo。

3.Constructor Pattern
諸如’new foo()’這種形式,帶有new關鍵字出現。這種模式下,foo函式中的this永遠指向new foo()返回的物件。

4.Apply Pattern
諸如’foo.call(ThisObject)’和’foo.apply(ThisObject)’這種模式,使用了函式內建的call和apply函式。這種模式中函式內部的this指向call和apply函式的第一個引數.如果傳入的ThisObject是null或者undefined則函式的this指向global。

所以確定函式是哪種呼叫模式,那麼確定函式內的this就很easy了.

另外一篇對this講解的很透徹:

點我

this