this到底指向什麼地方,決定於函式的呼叫方式。
1、 指向全域性變數 --- 函式被單獨呼叫的時候
functionfn()
var a = 2;
fn();
//2 fn單獨呼叫,this引用window
2、 指向某物件 --- 隱式繫結
隱式呼叫的意思是,函式呼叫時擁有乙個上下文物件
functionfn()
var obj =;
obj.fn();
//2 this引用obj。
//說明的一點是,最後乙個呼叫該函式的物件是傳到函式的上下文物件。如:
function
fn()
var obj2 =;
var obj1 =;
obj1.obj2.fn();
//42 this引用的是obj2.
//還有一點要說明的是,失去隱式繫結的情況,如下:
function
fn()
var obj =;
var bar = obj.fn; //
函式引用傳遞
var a = "全域性"; //
定義全域性變數
bar(); //
"全域性"
如上,雖然有隱式繫結,但是它執行的效果明顯是把fn賦給bar。這樣bar執行的時候,依然是函式單獨呼叫,指向全域性變數,所以輸出結果如上。
3、 指向某物件 --- 顯示繫結
functionfn()
var obj =;
fn.call( obj );
//2
如果我們傳遞第乙個值為簡單值,那麼後台會自動轉換為對應的封裝物件。如果傳遞為null,那麼結果就是在繫結預設全域性變數。
4、 指向類例項
如果是乙個建構函式,用new來呼叫,那麼this指向新建立的物件。
functionfn(a)
var bar = new fn( 2);
console.log( bar.a );
//2
js高階之三 this指向
本文不考慮嚴格模式 錯誤之處感謝提出,請勿噴 function 函式 this 指向一共有4種規則 預設繫結,隱式繫結,顯式繫結,new繫結 預設繫結 function fn var a 1 fn a 1 fn在沒有任何修飾的被呼叫,只能使用預設繫結 this指向了直接呼叫的window 隱式繫結 ...
js之this指向規則
1.在瀏覽器環境中,this在全域性作用域下指向window物件,nodejs裡面指向global物件 2.函式中三種不同的指向 定義乙個函式 function foo 不同的環境指向不同的物件 直接呼叫 foo window global物件 放在物件裡使用 let obj obj.foo obj...
js物件導向之this指向
對於前端開發者來說,this是乙個讓人又愛又恨的小妖精。應用得好,專案事半功倍,應用得不好,專案可能漏洞百出。接下來本文就將揭開this的神秘面紗。鄙人第一次鼓足了膽子寫部落格,望路過的大神輕踩 首先強調的一點是,在函式中this指向不是在定義的時候確定的,而是在真正執行此函式時確定的。因為this...