JS中函式的 this 各種指向

2021-09-08 11:48:24 字數 1993 閱讀 8473

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關鍵字就等同於複製了乙份

function

fn()

; }

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還是指向函式的例項。

function

fn()

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的指向問題,雖然我們上面講解過了,但是並沒有深入的討論這個問題,網上也很少說,所以在這裡有必要說一下。

function

fn()

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就是呼叫方法的那個...