this是js的乙個關鍵字,隨著函式使用場合不同,this的值會發生變化。但是總有乙個原則,那就是this指的是呼叫函式的那個物件。
情形1:如果乙個函式中有this,但是它沒有被上一級的物件所呼叫,那麼this指向的就是window,這裡需要說明的是在js的嚴格版中this指向的不是window。
一些例子:
//this最終指向的是呼叫它的物件,這裡的函式a實際是被window物件所點出來的
//this指向的是物件o,因為你呼叫這個fn是通過o.fn()執行的,那自然指向就是物件o
var o =}}o.b.fn();
//儘管物件b中沒有屬性a,這個this指向的也是物件b,因為this只會指向它的上一級物件,不管這個物件中有沒有this要的東西。
var o =
}}o.b.fn();
var o =}}var j=o.b.fn;
j();
//建構函式版this:
function
fn()
var a = new
fn();
console.log(a.user);
//sherry
//這裡之所以物件a可以點出函式fn裡面的user是因為new關鍵字可以改變this的指向,將這個this指向物件a,為什麼說a是物件,因為用了new關鍵字就是建立乙個物件例項,我們這裡用變數a建立了乙個fn的例項(相當於複製了乙份fn到物件a裡面),此時僅僅只是建立,並沒有執行,而呼叫這個函式fn的是物件a,那麼this指向的自然是物件a,那麼為什麼物件fn中會有user,因為你已經複製了乙份fn函式到物件a中,用了new關鍵字就等同於複製了乙份
functionfn()
; }
var a = new
fn;
console.log(a.user);
//undefined
function
fn() ;}
var a = new
fn;
console.log(a.user);
//undefined
function
fn()
var a = new
fn;
console.log(a.user);
//sherry
function
fn()
var a = new
fn;
console.log(a.user);
//sherry
//以上:如果返回值是乙個物件,那麼this指向的就是那個返回的物件,如果返回值不是乙個物件那麼this還是指向函式的例項。
functionfn()
var a = new
fn;
console.log(a);
//fn
//雖然null也是物件,但是在這裡this還是指向那個函式的例項,因為null比較特殊。
function
fn()
var a = new
fn;
console.log(a.user);
//sherry
注意點:
1.在嚴格版中的預設的this不再是window,而是undefined。
2.new操作符會改變函式this的指向問題,雖然我們上面講解過了,但是並沒有深入的討論這個問題,網上也很少說,所以在這裡有必要說一下。
functionfn()
var a = new
fn();
console.log(a.num); //1
//
js函式中this的指向
本文是我個人對this指向的一些理解,如有不足之處,還望大家可以批評指正,在此先謝過了!首先,我們來回顧一下es5裡函式的幾種呼叫方式 1 直接呼叫 foo 2 方法呼叫 obj.foo 以上兩種呼叫方法,this的指向可以這樣去確定 函式的呼叫者就是this的指向!例如 obj.foo 裡.foo...
js函式中的this的指向
普通函式中的this是誰?window 物件.方法中的this是誰?當前的例項物件 定時器方法中的this是誰?window 建構函式中的this是誰?例項物件嚴格模式 use strict 嚴格模式 function f1 f1 普通函式 function f1 f1 定時器中的this seti...
JS 函式中this的指向問題
解析器在呼叫函式每次都會向函式內部傳遞進乙個隱含的引數。這個隱含的引數就是this,this指向的是乙個物件。這個物件我們稱為函式執行的上下文物件,根據函式的呼叫方式不同,this會指向不同的物件。以函式的形式呼叫時,this永遠都是window。fn 以方法的形式呼叫時,this就是呼叫方法的那個...