JavaScript 中的 this 關鍵字
JavaScript 中最令人困惑的關鍵字之一是 this 關鍵字。它是一個特殊的標識符關鍵字,在每個函數的作用域中自動定義,但它到底指的是什麼,即使是經驗豐富的 JavaScript 開發人員也會感到困惑。
this 關鍵字指的是一段程式碼(例如函數體)應該運行的上下文。最典型的是,它用在物件方法中,其中 this 指的是該方法所附加的對象,從而允許在不同的物件上重複使用相同的方法。
this 的值可以在函數執行的地方識別,而不是在函數宣告的地方
我們將檢查不同的規則來辨識 javascript 中的 this
預設綁定
我們將應用程式呼叫最常見情況的預設規則:獨立函數執行。當其他規則都不適用時,將此規則視為預設的包羅萬象的規則。
在獨立函數呼叫中,該值將是全域對象(在瀏覽器環境中,它是視窗對象,在節點環境中,它將是全域對象)
function bar() { console.log(this) // this will be global object (window) } bar()
但是......
這個值可以與程式碼在嚴格模式或非嚴格模式下運作的方式不同
如果當函數作為獨立函數呼叫時,這通常在非嚴格模式下引用全域對象,在嚴格模式下引用未定義
"use strict" function bar() { console.log(this) // undefined } bar()
微妙但重要的是,只有當 bar() 的內容未在嚴格模式下運作時,全域物件才有資格進行預設綁定;
function bar() { console.log(this) // global object (window) } (function() { "use strict" bar() })()
隱式綁定
當常規函數作為物件的方法 (obj.method()) 被呼叫時,this 指向該物件。
function bar() { console.log(this) } const obj = { name: "javascript", foo } obj.foo() // this here is object owing the function
首先,請注意聲明 bar() 以及隨後將其作為引用屬性新增至 obj 上的方式。無論 foo() 最初是在 obj 上聲明,還是稍後添加為引用(如此程式碼片段所示),在任何一種情況下,該函數都不會真正由 obj 物件「擁有」或「包含」。
隱式遺失:
使用回調時,隱式綁定函數會遺失該綁定,這通常意味著它會回退到全域物件或未定義的預設綁定,具體取決於嚴格模式。
function bar() { setTimeout(function() { console.log(this) // this will be global object }, 1000); } const obj = { name: "javascript", bar } obj.bar() // this will be global object
function bar() { console.log(this) } const obj = { name: "javascript", bar } const a = obj.bar a() // this will be global object
顯式綁定
使用我們剛剛看到的隱式綁定,我們必須修改相關物件以包含其自身對函數的引用,並使用此屬性函數引用來間接(隱式)將 this 綁定到物件。
但是,如果您想要強制函數呼叫使用特定物件進行 this 綁定,而不是在該物件上放置屬性函數引用,該怎麼辦?
是的,這是可能的,javascript提供了很多方法,例如.map,.filter數組,我們在函數中只有很少的方法。它們是 apply 、 call 和 bind
這是這些方法的語法
打電話
function bar() { console.log(this) // this will be global object (window) } bar()
申請
"use strict" function bar() { console.log(this) // undefined } bar()
apply 和 call 之間有細微的差別。語法相同,但我們在 apply 方法中將參數作為數組傳遞
function bar() { console.log(this) // global object (window) } (function() { "use strict" bar() })()
透過 bar.call(..) 明確綁定呼叫 bar 允許我們強制其 this 為 obj。
新綁定
當一個函數用作建構函式時(使用 new 關鍵字),它的 this 會綁定到正在建構的新對象,無論建構函式是在哪個物件上存取的。 this 的值將成為 new 表達式的值,除非建構函數傳回另一個非原始值。
function bar() { console.log(this) } const obj = { name: "javascript", foo } obj.foo() // this here is object owing the function
以上是JavaScript 中的 this 關鍵字的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

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

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

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

如何在JavaScript中將具有相同ID的數組元素合併到一個對像中?在處理數據時,我們常常會遇到需要將具有相同ID�...

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

深入探討console.log輸出差異的根源本文將分析一段代碼中console.log函數輸出結果的差異,並解釋其背後的原因。 �...

掌握了入門級TypeScript教程後,您應該能夠在支持TypeScript的IDE中編寫自己的代碼,並將其編譯成JavaScript。本教程將深入探討TypeScript中各種數據類型。 JavaScript擁有七種數據類型:Null、Undefined、Boolean、Number、String、Symbol(ES6引入)和Object。 TypeScript在此基礎上定義了更多類型,本教程將詳細介紹所有這些類型。 Null數據類型 與JavaScript一樣,TypeScript中的null

實現視差滾動和元素動畫效果的探討本文將探討如何實現類似資生堂官網(https://www.shiseido.co.jp/sb/wonderland/)中�...

在PowerPoint中可以運行JavaScript,通過VBA調用外部JavaScript文件或嵌入HTML文件來實現。 1.使用VBA調用JavaScript文件,需啟用宏並具備VBA編程知識。 2.嵌入包含JavaScript的HTML文件,簡單易行但受安全限制。優點包括擴展功能和靈活性,劣勢涉及安全性、兼容性和復雜性,實際應用需注意安全性、兼容性、性能和用戶體驗。
