亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
2。為此this四個(gè)主要規(guī)則
?規(guī)則1:隱性綁定(最常見(jiàn))
?規(guī)則2:明確綁定callapply , bind
?規(guī)則3:新綁定new關(guān)鍵字)
?規(guī)則4:默認(rèn)綁定(後備)
3。箭頭功能改變遊戲
4。常見(jiàn)的陷阱和修復(fù)
?在回調(diào)中丟失上下文
首頁(yè) web前端 前端問(wèn)答 揭開(kāi)JavaScript的神秘面紗`this`關(guān)鍵字

揭開(kāi)JavaScript的神秘面紗`this`關(guān)鍵字

Jul 28, 2025 am 03:33 AM
this

這是由調(diào)用函數(shù)的方式而不是定義的位置決定的。 2。按優(yōu)先順序順序排列的四個(gè)規(guī)則是:如果使用了新規(guī)則,則指的是新創(chuàng)建的實(shí)例;如果使用,使用或綁定,則將其明確設(shè)置為提供的對(duì)象;如果在對(duì)像上調(diào)用函數(shù)(例如,obj.func()),則該函數(shù)是指點(diǎn)之前的對(duì)象。否則,此默認(rèn)為非圖案模式或在嚴(yán)格模式下未定義的全局對(duì)象。 3.箭頭功能沒(méi)有自己的功能,而是從封閉的詞彙範(fàn)圍中繼承它,使其可用於在封閉和回調(diào)中保存上下文。 4。可以使用bind()或箭頭功能包裝器來(lái)固定常見(jiàn)的陷阱,例如在事件處理程序中丟失上下文,以維護(hù)預(yù)期的值。了解這些規(guī)則使開(kāi)發(fā)人員可以可靠地預(yù)測(cè)這種行為。

揭開(kāi)JavaScript的神秘面紗`this`關(guān)鍵字

JavaScript this關(guān)鍵字使許多開(kāi)發(fā)人員感到困惑 - 不是因?yàn)樗举|(zhì)上是複雜的,而是因?yàn)槠鋬r(jià)值根據(jù)函數(shù)的調(diào)用方式而變化。一旦您理解了統(tǒng)治this規(guī)則的規(guī)則,它就不再是神秘的。讓我們以清晰度和實(shí)踐示例將其分解。

揭開(kāi)JavaScript的神秘面紗`this`關(guān)鍵字

1。 this取決於執(zhí)行上下文

在JavaScript中, this是指函數(shù)的執(zhí)行上下文,即如何調(diào)用函數(shù),而不是定義的位置。

與使用letconst聲明的變量不同, this與範(fàn)圍無(wú)關(guān),而是關(guān)於調(diào)用上下文。

揭開(kāi)JavaScript的神秘面紗`this`關(guān)鍵字
函數(shù)sayhi(){
  console.log(this.name);
}

根據(jù)sayHi()調(diào)用方式, this可能指向不同的對(duì)象。


2。為此this四個(gè)主要規(guī)則

確定this四種主要方法。他們遵循優(yōu)先順序。

揭開(kāi)JavaScript的神秘面紗`this`關(guān)鍵字

?規(guī)則1:隱性綁定(最常見(jiàn))

當(dāng)函數(shù)稱(chēng)為對(duì)象的方法時(shí), this是指該對(duì)象。

 const user = {
  名稱(chēng):“愛(ài)麗絲”,
  engret(){
    console.log(`hi,我是$ {this.name}`);
  }
};

user.greet(); //“嗨,我是愛(ài)麗絲”

this = dot( user )之前的對(duì)象。

??警告:如果提取方法,則會(huì)失去上下文:

 const engre = user.greet;
迎接(); //“嗨,我不確定”  - ``現(xiàn)在是全局(或在嚴(yán)格模式下``未定義'')

?規(guī)則2:明確綁定call , apply , bind

您可以使用.call() ,. .apply().bind()手動(dòng)設(shè)置this 。

函數(shù)介紹(){
  console.log(`我是$ {this.name},$ {this.age}年齡。
}

const person = {名稱(chēng):“鮑勃”,年齡:30};

介紹。 //“我是鮑勃,30歲。”
介紹。 // 相同的
  • call(thisArg, arg1, arg2, ...)
  • apply(thisArg, [argsArray])
  • bind(thisArg)使用this永久設(shè)置返回一個(gè)新功能。
 const boundintro =介紹。
boundintro(); //始終將``一個(gè)人'作為``''

對(duì)於可能丟失上下文的回調(diào)或事件處理程序有用。

?規(guī)則3:新綁定new關(guān)鍵字)

當(dāng)使用new調(diào)用函數(shù)時(shí), this是指新創(chuàng)建的對(duì)象。

功能人員(名稱(chēng)){
  this.name = name; //`this` =新創(chuàng)建的實(shí)例
  this.greet = function(){
    console.log(`您好,我是$ {this.name}`);
  };
}

const p =新人(“查理”);
p.greet(); //“你好,我是查理”

在引擎蓋下, new做到了:

  1. 創(chuàng)建一個(gè)新的空對(duì)象。
  2. this功能內(nèi)部設(shè)置為該對(duì)象。
  3. 返回對(duì)象(除非明確返回另一個(gè)對(duì)象)。

?規(guī)則4:默認(rèn)綁定(後備)

當(dāng)以上所有內(nèi)容都不適用時(shí), this默認(rèn)為全局對(duì)象,或在嚴(yán)格模式下undefined 。

函數(shù)showthis(){
  console.log(this);
}

Shadthis(); //在瀏覽器中:`window'(non-strict),`'undefined'

??這就是為什麼依靠全球this是危險(xiǎn)的原因 - 尤其是在模塊中(默認(rèn)情況下是嚴(yán)格的)。


3。箭頭功能改變遊戲

箭頭功能沒(méi)有自己的this 。相反,他們從封閉的詞彙範(fàn)圍中繼承了this 。

 const user = {
  名稱(chēng):“ diana”,
  常規(guī)FUNC:function(){
    console.log(this.name); //“戴安娜”
  },,
  arrowfunc:()=> {
    console.log(this.name); //不確定(從外部繼承`this')
  }
};

user.regularfunc(); //工作
user.arrowfunc(); //無(wú)法正常工作

為什麼?在定義箭頭函數(shù)時(shí),在外部範(fàn)圍中可能是this windowundefined )。

?當(dāng)您想保留this時(shí),請(qǐng)使用箭頭功能 - 在封閉和事件處理程序中常見(jiàn)。

功能計(jì)時(shí)器(){
  this.seconds = 0;

  setInterval(()=> {
    這第二個(gè); //?`this`指計(jì)時(shí)器實(shí)例
  },1000);
}

如果您在此處使用了常規(guī)功能, this將指向全局對(duì)像或undefined 。


4。常見(jiàn)的陷阱和修復(fù)

?在回調(diào)中丟失上下文

const button = document.queryselector('button');
const widget = {
  單擊:false,
  onclick(){
    this.clicked = true;
    console.log(this.clicked);
  }
};

button.AddeventListener('click',widget.onclick);
//`this'是按鈕(dom元素),而不是``窗口''

?用.bind()修復(fù):

 button.AddeventListener('click',widget.onclick.bind(widget));

?或使用箭頭功能包裝器:

 button.addeventListener('click',()=> widget.onclick());

摘要:如何this

按以下順序詢(xún)問(wèn):

  1. new用嗎? → this =新實(shí)例。
  2. callapplybind使用嗎? → this =指定的對(duì)象。
  3. 該函數(shù)是否在對(duì)像上調(diào)用(例如, obj.func() )? → this =那個(gè)對(duì)象。
  4. else→ this =全局(非圖案)或undefined (嚴(yán)格)。
  5. 對(duì)於箭頭功能:查看封閉範(fàn)圍。

理解this不是關(guān)於記住邊緣案例的,而是了解這些規(guī)則並逐步應(yīng)用它們。一旦您內(nèi)化了四個(gè)綁定規(guī)則並記住箭頭功能的表現(xiàn), this將變得可以預(yù)測(cè)。

基本上,只需關(guān)注呼叫網(wǎng)站即可。

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線(xiàn)上人工智慧工具。

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整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門(mén)話(huà)題

Laravel 教程
1597
29
PHP教程
1488
72
聊聊Vue2為什麼能透過(guò)this存取各種選項(xiàng)中屬性 聊聊Vue2為什麼能透過(guò)this存取各種選項(xiàng)中屬性 Dec 08, 2022 pm 08:22 PM

這篇文章帶大家解讀vue原始碼,來(lái)介紹一下Vue2中為什麼可以使用 this 存取各種選項(xiàng)中的屬性,希望對(duì)大家有幫助!

一篇搞懂this指向,追趕70%的前端人 一篇搞懂this指向,追趕70%的前端人 Sep 06, 2022 pm 05:03 PM

同事因?yàn)閠his指向的問(wèn)題卡住的bug,vue2的this指向問(wèn)題,使用了箭頭函數(shù),導(dǎo)致拿不到對(duì)應(yīng)的props。當(dāng)我跟他介紹的時(shí)候他竟然不知道,隨後也刻意的看了一下前端交流群,至今最起碼還有70%以上的前端程式設(shè)計(jì)師搞不明白,今天給大家分享一下this指向,如果啥都沒(méi)學(xué)會(huì),請(qǐng)給我一個(gè)大嘴巴子。

使用this關(guān)鍵字的巧妙方式在jQuery中 使用this關(guān)鍵字的巧妙方式在jQuery中 Feb 25, 2024 pm 04:09 PM

jQuery中this關(guān)鍵字的靈活運(yùn)用在jQuery中,this關(guān)鍵字是一個(gè)非常重要且靈活的概念,它用來(lái)引用目前正在操作的DOM元素。透過(guò)合理的運(yùn)用this關(guān)鍵字,我們可以方便地操作頁(yè)面中的元素,實(shí)現(xiàn)各種互動(dòng)效果和功能。本文將結(jié)合具體的程式碼範(fàn)例,介紹this關(guān)鍵字在jQuery中的靈活運(yùn)用。簡(jiǎn)單的this範(fàn)例首先,我們來(lái)看一個(gè)簡(jiǎn)單的this範(fàn)例。假設(shè)我們有一

什麼是this?深入解析JavaScript中的this 什麼是this?深入解析JavaScript中的this Aug 04, 2022 pm 05:02 PM

什麼是this?以下這篇文章跟大家介紹一下JavaScript中的this,並聊聊this在函數(shù)不同呼叫方式下的區(qū)別,希望對(duì)大家有所幫助!

JavaScript如何改變this指向?三種方法淺析 JavaScript如何改變this指向?三種方法淺析 Sep 19, 2022 am 09:57 AM

JavaScript如何改變this指向?以下這篇文章跟大家介紹一下JS改變this指向的三種方法,希望對(duì)大家有幫助!

帶你去詳解 this 的四個(gè)綁定規(guī)則 帶你去詳解 this 的四個(gè)綁定規(guī)則 Nov 01, 2022 pm 05:49 PM

this 關(guān)鍵字是 JavaScript 中最複雜的機(jī)制之一。它是一個(gè)很特別的關(guān)鍵字,被自動(dòng)定義在所有函數(shù)的作用域中。但即使是非常有經(jīng)驗(yàn)的 JavaScript 開(kāi)發(fā)者也很難說(shuō)清它到底指向什麼。

JavaScript箭頭函數(shù)中的this詳解 JavaScript箭頭函數(shù)中的this詳解 Jan 25, 2024 pm 01:41 PM

JavaScript中箭頭函數(shù)是一種比較新的語(yǔ)法,沒(méi)有自己的this關(guān)鍵字,相反箭頭函數(shù)的this指向包含它的作用域?qū)ο?,影響方面有?、箭頭函數(shù)中的this是靜態(tài)的;2、箭頭函數(shù)不能作為構(gòu)造函數(shù)使用;3、箭頭函數(shù)不能用作方法。

Java中this方法怎麼使用 Java中this方法怎麼使用 Apr 18, 2023 pm 01:58 PM

一、this關(guān)鍵字1.this的類(lèi)型:哪個(gè)物件呼叫就是哪個(gè)物件的參考類(lèi)型二、用法總結(jié)1.this.data;//存取屬性2.this.func();//存取方法3.this( );//呼叫本類(lèi)別中其他建構(gòu)方法三、解釋用法1.this.data這種是在成員方法中使用讓我們來(lái)看看不加this會(huì)出現(xiàn)什麼樣的狀況classMyDate{publicintyear;publicintmonth;publicintday; publicvoidsetDate(intyear,intmonth,intday){ye

See all articles