国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 web前端 js教程 JavaScript 中的 this 關(guān)鍵字

JavaScript 中的 this 關(guān)鍵字

Jan 12, 2025 pm 02:40 PM

this keyword in javascript

JavaScript 中最令人困惑的關(guān)鍵字之一是 this 關(guān)鍵字。它是一個(gè)特殊的標(biāo)識符關(guān)鍵字,在每個(gè)函數(shù)的作用域中自動定義,但它到底指的是什麼,即使是經(jīng)驗(yàn)豐富的 JavaScript 開發(fā)人員也會感到困惑。

this 關(guān)鍵字指的是一段程式碼(例如函數(shù)體)應(yīng)該運(yùn)行的上下文。最典型的是,它用在物件方法中,其中 this 指的是該方法所附加的對象,從而允許在不同的物件上重複使用相同的方法。

this 的值可以在函數(shù)執(zhí)行的地方識別,而不是在函數(shù)宣告的地方

我們將檢查不同的規(guī)則來辨識 javascript 中的 this

預(yù)設(shè)綁定

我們將應(yīng)用程式呼叫最常見情況的預(yù)設(shè)規(guī)則:獨(dú)立函數(shù)執(zhí)行。當(dāng)其他規(guī)則都不適用時(shí),將此規(guī)則視為預(yù)設(shè)的包羅萬象的規(guī)則。

在獨(dú)立函數(shù)呼叫中,該值將是全域?qū)ο螅ㄔ跒g覽器環(huán)境中,它是視窗對象,在節(jié)點(diǎn)環(huán)境中,它將是全域?qū)ο螅?br>

function bar() {
    console.log(this) // this will be global object (window)
}
bar()

但是......

這個(gè)值可以與程式碼在嚴(yán)格模式或非嚴(yán)格模式下運(yùn)作的方式不同

如果當(dāng)函數(shù)作為獨(dú)立函數(shù)呼叫時(shí),這通常在非嚴(yán)格模式下引用全域?qū)ο螅趪?yán)格模式下引用未定義

"use strict"
function bar() {
    console.log(this) // undefined
}
bar()

微妙但重要的是,只有當(dāng) bar() 的內(nèi)容未在嚴(yán)格模式下運(yùn)作時(shí),全域物件才有資格進(jìn)行預(yù)設(shè)綁定;

function bar() {
    console.log(this) // global object (window)
}
(function() {
    "use strict"
    bar()
})()

隱式綁定

當(dāng)常規(guī)函數(shù)作為物件的方法 (obj.method()) 被呼叫時(shí),this 指向該物件。

function bar() {
    console.log(this)
}
const obj = {
    name: "javascript",
    foo
}
obj.foo() // this here is object owing the function

首先,請注意聲明 bar() 以及隨後將其作為引用屬性新增至 obj 上的方式。無論 foo() 最初是在 obj 上聲明,還是稍後添加為引用(如此程式碼片段所示),在任何一種情況下,該函數(shù)都不會真正由 obj 物件「擁有」或「包含」。

隱式遺失:
使用回調(diào)時(shí),隱式綁定函數(shù)會遺失該綁定,這通常意味著它會回退到全域物件或未定義的預(yù)設(shè)綁定,具體取決於嚴(yán)格模式。

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

顯式綁定

使用我們剛剛看到的隱式綁定,我們必須修改相關(guān)物件以包含其自身對函數(shù)的引用,並使用此屬性函數(shù)引用來間接(隱式)將 this 綁定到物件。

但是,如果您想要強(qiáng)制函數(shù)呼叫使用特定物件進(jìn)行 this 綁定,而不是在該物件上放置屬性函數(shù)引用,該怎麼辦?

是的,這是可能的,javascript提供了很多方法,例如.map,.filter數(shù)組,我們在函數(shù)中只有很少的方法。它們是 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 之間有細(xì)微的差別。語法相同,但我們在 apply 方法中將參數(shù)作為數(shù)組傳遞

function bar() {
    console.log(this) // global object (window)
}
(function() {
    "use strict"
    bar()
})()

透過 bar.call(..) 明確綁定呼叫 bar 允許我們強(qiáng)制其 this 為 obj。

新綁定

當(dāng)一個(gè)函數(shù)用作建構(gòu)函式時(shí)(使用 new 關(guān)鍵字),它的 this 會綁定到正在建構(gòu)的新對象,無論建構(gòu)函式是在哪個(gè)物件上存取的。 this 的值將成為 new 表達(dá)式的值,除非建構(gòu)函數(shù)傳回另一個(gè)非原始值。

function bar() {
    console.log(this)
}
const obj = {
    name: "javascript",
    foo
}
obj.foo() // this here is object owing the function

以上是JavaScript 中的 this 關(guān)鍵字的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Laravel 教程
1602
29
PHP教程
1504
276
如何在node.js中提出HTTP請求? 如何在node.js中提出HTTP請求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。 1.使用內(nèi)置的http/https模塊無需依賴,適合基礎(chǔ)場景,但需手動處理數(shù)據(jù)拼接和錯(cuò)誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請求;2.axios是基於Promise的第三方庫,語法簡潔且功能強(qiáng)大,支持async/await、自動JSON轉(zhuǎn)換、攔截器等,推薦用於簡化異步請求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基於Promise且語法簡單

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時(shí)復(fù)制副本,因此互不影響;引用類型如對象、數(shù)組和函數(shù)存儲的是內(nèi)存地址,指向同一對象的變量會相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助於編寫更穩(wěn)定可靠的代碼。

超越地圖和過濾器的高階功能的JS綜述 超越地圖和過濾器的高階功能的JS綜述 Jul 10, 2025 am 11:41 AM

JavaScript數(shù)組中,除了map和filter,還有其他強(qiáng)大且不常用的方法。 1.reduce不僅能求和,還可計(jì)數(shù)、分組、展平數(shù)組、構(gòu)建新結(jié)構(gòu);2.find和findIndex用於查找單個(gè)元素或索引;3.some和every用於判斷是否存在或全部滿足條件;4.sort可排序但會改變原數(shù)組;5.使用時(shí)注意複製數(shù)組避免副作用。這些方法使代碼更簡潔高效。

過濾JavaScript中的一系列對象 過濾JavaScript中的一系列對象 Jul 12, 2025 am 03:14 AM

JavaScript中filter()方法用於創(chuàng)建一個(gè)包含所有通過測試元素的新數(shù)組。 1.filter()不修改原數(shù)組,而是返回符合條件元素的新數(shù)組;2.基本語法為array.filter((element)=>{returncondition;});3.可按屬性值過濾對像數(shù)組,如篩選年齡大於30的用戶;4.支持多條件篩選,例如同時(shí)滿足年齡和名字長度條件;5.可處理動態(tài)條件,將篩選參數(shù)傳入函數(shù)以實(shí)現(xiàn)靈活過濾;6.使用時(shí)注意必須返回布爾值,避免返回空數(shù)組,以及結(jié)合其他方法實(shí)現(xiàn)字符串匹配等複雜邏

如何檢查數(shù)組是否在JavaScript中包含一個(gè)值 如何檢查數(shù)組是否在JavaScript中包含一個(gè)值 Jul 13, 2025 am 02:16 AM

在JavaScript中檢查數(shù)組是否包含某個(gè)值,最常用方法是includes(),它返回布爾值,語法為array.includes(valueToFind),例如fruits.includes('banana')返回true;若需兼容舊環(huán)境,則使用indexOf(),如numbers.indexOf(20)!==-1返回true;對於對像或複雜數(shù)據(jù),應(yīng)使用some()方法進(jìn)行深度比較,如users.some(user=>user.id===1)返回true。

JavaScript上下文中解釋的虛擬DOM的概念 JavaScript上下文中解釋的虛擬DOM的概念 Jul 12, 2025 am 03:09 AM

虛擬DOM是一種優(yōu)化真實(shí)DOM更新的編程概念,通過在內(nèi)存中創(chuàng)建與真實(shí)DOM對應(yīng)的樹形結(jié)構(gòu),避免頻繁直接操作真實(shí)DOM。其核心原理是:1.數(shù)據(jù)變化時(shí)生成新的虛擬DOM;2.對比新舊虛擬DOM找出最小差異;3.批量更新真實(shí)DOM以減少重排重繪開銷。此外,使用唯一穩(wěn)定key可提升列表對比效率,而部分現(xiàn)代框架已採用其他技術(shù)替代虛擬DOM。

在異步/等待JavaScript函數(shù)中處理錯(cuò)誤 在異步/等待JavaScript函數(shù)中處理錯(cuò)誤 Jul 12, 2025 am 03:17 AM

處理異步函數(shù)中的錯(cuò)誤應(yīng)使用try/catch、在調(diào)用鏈中處理、使用.catch()方法、並監(jiān)聽unhandledrejection事件。 1.使用try/catch捕獲錯(cuò)誤是推薦方式,結(jié)構(gòu)清晰且能處理await中的異常;2.在調(diào)用鏈中處理錯(cuò)誤可集中邏輯,適合多步驟流程;3.使用.catch()可在調(diào)用async函數(shù)後捕獲錯(cuò)誤,適用於Promise組合場景;4.監(jiān)聽unhandledrejection事件可記錄未處理的rejection,作為最後一道防線;以上方法共同確保異步錯(cuò)誤被正確捕獲和處理。

如何處理JavaScript中的時(shí)區(qū)? 如何處理JavaScript中的時(shí)區(qū)? Jul 11, 2025 am 02:41 AM

處理JavaScript時(shí)區(qū)問題的關(guān)鍵在於選擇合適的方法。 1.使用原生Date對象時(shí),推薦以UTC時(shí)間進(jìn)行存儲和傳輸,並在展示時(shí)轉(zhuǎn)換為用戶本地時(shí)區(qū);2.對於復(fù)雜時(shí)區(qū)操作,可使用moment-timezone,它支持IANA時(shí)區(qū)數(shù)據(jù)庫並提供便捷的格式化與轉(zhuǎn)換功能;3.若需本地化顯示時(shí)間且不想引入第三方庫,可使用Intl.DateTimeFormat;4.推薦現(xiàn)代輕量方案day.js配合timezone和utc插件,其API簡潔、性能良好並支持時(shí)區(qū)轉(zhuǎn)換。

See all articles