這篇文章主要介紹了js中this物件用法的詳細分析,需要的朋友學習分享下。
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中文網其他相關文章!

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

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