js中this物件用法實例詳解
this物件是在函數運行時,基於函數的執行環境綁定的。本文主要介紹了js中this物件用法的詳細分析,需要的朋友學習分享下吧,希望能幫助大家。
其實這句話的本質就是,誰呼叫了函數,this就指向誰
具體的來說,通常有以下幾種情況:
全域函數
在全域環境中,this指向Window
//例子1 function A() { console.log(this) } A();//Window
上面的範例很簡單,函數A在全域環境中執行,也就是全域物件Window呼叫了函數。此時this指向Window
物件方法
當物件方法呼叫時,this指向呼叫該方法的物件
//例子2 var b = { getThis:function(){ console.log(this) } } b.getThis()//b
到這裡我們舉的例子都比較簡單易懂,接下來來一個有意思的:
//例子3 var c = { getFunc:function(){ return function(){ console.log(this) } } } var cFun = c.getFunc() cFun()//Window
這個例子和前一個例子不一樣,執行c.getFunc()時,首先回傳的是一個匿名函數,我們將這個函數賦值給cFun,接著在全域環境中呼叫了cFun(),所以此時this指向的還是Window。
如果我們一定要讓這裡回傳的是c物件呢?在開頭我們說過,this物件是在函數執行時確定的,在例子3中,執行c.getFunc()時,this物件指向的還是c,所以我們只要保持住這個this就好了,對上面的程式碼稍微改動:
//例子4 var c = { getFunc:function(){ var that = this //在这里保留住this return function(){ console.log(that) } } } var cFun = c.getFunc() cFun()//c
這也就是我們常常可以在一些程式碼中看到var self = this或var that = this之類的原因了。
call和apply
此時this物件通常指向函數中指定的this值(注意這裡的通常2字,考試要考的)
call和apply算是老生常談,但還是稍微介紹下,怕新同學可能沒接觸過(其實是為了湊點字數),拿call來說,語法是這樣的
fun.call(thisArg, arg1, arg2, ...)
這個方法怎麼用呢,看下面的例子:
//例子5 var d = { getThis:function(){ console.log(this) } } var e = { name:'e'//(给e写个`name`属性只是因为觉得孤零零的太难看了~~) } d.getThis.call(e)//e
在這裡我們就可以看出call函數的意思了:指定一個物件o1去呼叫其他物件o2的方法,此時this物件指向o1
好了,那為什麼前面我們說通常呢?因為,這裡的thisArg是可以指定為null和undefined的。請看:
//例子6 var d = { getThis:function(){ console.log(this) } } d.getThis.call(null)//Window d.getThis.call(undefined)//Window
此時的this指向全域物件Window
箭頭函數
es6中的箭頭函數現在也用的比較頻繁,但是有個需要注意的點是:
函數體內的this對象,就是定義時所在的對象,而不是使用時所在的對象。
其實出現這種情況的根本原因是:箭頭函數沒有this對象,所以箭頭函數的this就是外層程式碼的this
//例子7 var f = { getThis:()=>{ console.log(this) } } f.getThis()//Window
這個例子和前面例子2是基本上一樣的,只是把普通函數改寫成箭頭函數,但是此時的this物件已經指向了外層的Window。
考慮到這一點可能不好理解,我們再看幾個例子:
//例子8 var g = { getThis:function(){ return function(){console.log(this)} } } var h = { getThis:function(){ return ()=> console.log(this) } } g.getThis()()//Window h.getThis()()//h
這個例子裡,g的getThis寫法就和之前的例子3一樣,由於函數在全域環境中運行,所以此時this指向Window;h的getThis使用了箭頭函數,所以this指向了外層程式碼區塊的this所以,此時this指向的是h。
總結
一般情況下this物件指向呼叫函數的對象,全域環境中執行函數this物件指向Window
在call和apply函數中this指向指定的對象,如果指定的對為undefined或null,那麼this對象指向Window
在箭頭函數中,this對像等同於外層程式碼區塊的this
相關推薦:
以上是js中this物件用法實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Windows作業系統是全球最受歡迎的作業系統之一,其新版本Win11備受矚目。在Win11系統中,管理員權限的取得是一個重要的操作,管理員權限可以讓使用者對系統進行更多的操作和設定。本文將詳細介紹在Win11系統中如何取得管理員權限,以及如何有效地管理權限。在Win11系統中,管理員權限分為本機管理員和網域管理員兩種。本機管理員是指具有對本機電腦的完全管理權限

OracleSQL中的除法運算詳解在OracleSQL中,除法運算是一種常見且重要的數學運算運算,用來計算兩個數相除的結果。除法在資料庫查詢中經常用到,因此了解OracleSQL中的除法運算及其用法是資料庫開發人員必備的技能之一。本文將詳細討論OracleSQL中除法運算的相關知識,並提供具體的程式碼範例供讀者參考。一、OracleSQL中的除法運算

Linux系統呼叫system()函數詳解系統呼叫是Linux作業系統中非常重要的一部分,它提供了一種與系統核心互動的方式。其中,system()函數是常用的系統呼叫函數之一。本文將詳細介紹system()函數的使用方法,並提供對應的程式碼範例。系統呼叫的基本概念系統呼叫是使用者程式與作業系統核心互動的一種方式。使用者程式透過呼叫系統呼叫函數來請求作業系統

PHP中的模運算子(%)是用來取得兩個數值相除的餘數的。在本文中,我們將詳細討論模運算子的作用及用法,並提供具體的程式碼範例來幫助讀者更好地理解。 1.模運算子的作用在數學中,當我們將一個整數除以另一個整數時,就會得到一個商和一個餘數。例如,當我們將10除以3時,商數為3,餘數為1。模運算子就是用來取得這個餘數的。 2.模運算子的用法在PHP中,使用%符號來表示模

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

Linux的curl命令詳解摘要:curl是一種強大的命令列工具,用於與伺服器進行資料通訊。本文將介紹curl指令的基本用法,並提供實際的程式碼範例,幫助讀者更好地理解和應用該指令。一、curl是什麼? curl是命令列工具,用於發送和接收各種網路請求。它支援多種協議,如HTTP、FTP、TELNET等,並提供了豐富的功能,如檔案上傳、檔案下載、資料傳輸、代

Promise.resolve()詳解,需要具體程式碼範例Promise是JavaScript中一種用來處理非同步操作的機制。在實際開發中,常常需要處理一些需要依序執行的非同步任務,而Promise.resolve()方法就是用來傳回一個已經Fulfilled狀態的Promise物件。 Promise.resolve()是Promise類別的靜態方法,它接受一個

Numpy是一款Python科學計算庫,提供了豐富的陣列操作函數與工具。升級Numpy版本時需要查詢目前版本以確保相容性,本文將詳細介紹Numpy版本查詢的方法,並提供具體的程式碼範例。方法一:使用Python程式碼查詢Numpy版本使用Python程式碼可以輕鬆查詢Numpy的版本,以下是實作方法和範例程式碼:importnumpyasnpprint(np
