日本xxxx18视频在线观看-日本xxxx1819-日本xxxwww在线观看-日本xxx-日本xx-日本www在线视频

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

20個JavaScript重點知識點(11)this機制

admin
2025年3月26日 6:44 本文熱度 406

this 是 JavaScript 中最容易讓人困惑的概念之一。它的指向取決于函數(shù)的調(diào)用方式而非定義位置,且在不同場景下表現(xiàn)不同。

?

一、this 的本質(zhì)


this 是一個動態(tài)綁定的執(zhí)行上下文對象,指向當前函數(shù)運行時的“所有者”。它的值在函數(shù)被調(diào)用時確定,而非定義時。理解 this 的關(guān)鍵在于分析函數(shù)是如何被調(diào)用的

二、綁定規(guī)則


1. 默認綁定(獨立函數(shù)調(diào)用)

當函數(shù)作為獨立函數(shù)調(diào)用時(非方法、構(gòu)造函數(shù)等),非嚴格模式下 this 指向全局對象(瀏覽器中為 window),嚴格模式下為 undefined。

function showThis() {  console.log(this);}
showThis(); // 瀏覽器環(huán)境輸出 window(非嚴格模式)// 嚴格模式輸出 undefined

2. 隱式綁定(方法調(diào)用)

當函數(shù)作為對象方法調(diào)用時,this 指向調(diào)用該方法的對象。

const obj = {  name'Object',  logThis() {    console.log(this.name);  }};
obj.logThis(); // 輸出 "Object"
?? 隱式丟失陷阱:方法被賦值給變量后調(diào)用會導致 this 丟失。
const temp = obj.logThis;temp(); // 輸出 undefined(非嚴格模式指向 window)

3. 顯式綁定(call/apply/bind)

通過 call()apply() 或 bind() 強制指定 this 值。

function greet() {  console.log(`Hello, ${this.name}`);}
const user = { name'Alice' };
greet.call(user); // 輸出 "Hello, Alice"const boundGreet = greet.bind(user);boundGreet();

4. new 綁定(構(gòu)造函數(shù))

使用 new 調(diào)用構(gòu)造函數(shù)時,this 指向新創(chuàng)建的實例對象。

function Person(name) {  this.name = name;}
const bob = new Person('Bob');console.log(bob.name); // 輸出 "Bob"

5. 箭頭函數(shù)

箭頭函數(shù)沒有自己的 this,繼承外層作用域的 this 值,且無法通過 call/apply 修改。

const obj = {  traditionalfunction() {    console.log(this); // 指向 obj  },  arrow() => {    console.log(this); // 繼承外層(此處為全局)  }};
obj.traditional(); // objobj.arrow(); // window(非嚴格模式)

三、優(yōu)先級規(guī)則


當多個規(guī)則同時適用時,按以下優(yōu)先級決定 this 指向:

  1. new 綁定 > 顯式綁定 > 隱式綁定 > 默認綁定


  2. 四、this的3個特殊使用場景


1. 回調(diào)函數(shù)中的 this

常見于定時器、事件監(jiān)聽等場景,需要特別注意 this 指向:

const button = document.querySelector('button');button.addEventListener('click'function() {  console.log(this); // 指向 button 元素});
// 使用箭頭函數(shù)時:button.addEventListener('click'() => {  console.log(this); // 繼承外層 this(可能是 window)});

2. 嵌套函數(shù)中的 this

內(nèi)部函數(shù)不會繼承外部函數(shù)的 this(除非使用箭頭函數(shù))

const obj = {  name'Obj',  outer() {    function inner() {      console.log(this); // 默認綁定,非嚴格模式指向 window    }    inner();  }};

3. 類中的 this

類方法中的 this 指向?qū)嵗龑ο螅枳⒁夥椒ㄗ鳛榛卣{(diào)時的綁定問題:

class Counter {  constructor() {    this.count = 0;    // 需要綁定或使用箭頭函數(shù)    this.increment = this.increment.bind(this);  }
  increment() {    this.count++;  }}

五.this的4個實用小技巧


  1. 1.明確綁定:在需要固定 this 指向時,優(yōu)先使用箭頭函數(shù)或 bind

  2. 2.避免混用:同一函數(shù)中不要同時使用普通函數(shù)和箭頭函數(shù)定義方法

  3. 3.嚴格模式:使用 'use strict' 避免意外指向全局對象

  4. 4.調(diào)試技巧:在復雜場景中使用 console.log(this) 快速定位當前值


六、總結(jié)


調(diào)用方式
this 指向
示例
直接調(diào)用
全局對象/undefined
func()
方法調(diào)用
調(diào)用對象
obj.method()
new 調(diào)用
新創(chuàng)建的實例
new Constructor()
call/apply/bind
指定的對象
func.call(ctx)
箭頭函數(shù)
外層作用域的 this
() => {...}

理解 this 的關(guān)鍵在于分析函數(shù)的調(diào)用位置調(diào)用方式。通過掌握綁定規(guī)則和優(yōu)先級,可以準確預測代碼行為,避免常見陷阱。


閱讀原文:原文鏈接


該文章在 2025/3/27 13:25:03 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 91欧美日韩一区二区三 | 精品国产日韩欧美一区二区 | 欧美日韩国产高清视频在线观看 | 好吊妞视频998www | 成人禁在线观看午 | 国产肉丝袜 | 国产娱乐凹凸视觉盛宴在线视频 | 国产欧美日本亚洲精品一4区 | 国产免费一区二区三区免费视频 | 欧美日韩中文亚洲v在线综合 | 国产91色在线综合亚洲 | 日韩精品欧美在线成人 | 国产乱人视频在线观看播放器 | 欧美日韩另类在线 | 国偷自产一区二区免费视频 | 日韩高清欧美精品亚洲 | 国产国产人免费人成成免视频 | 14表妺毛还没长齐 | 精品国产色欧洲激情 | 欧美日本亚欧在线观看欧亚 | 国产日韩一区欧美 | 国产精品网站不卡在线观看 | 韩国日本国产 | 日韩精品免费网站 | 成人国产经典视频在线观看 | 欧美精品18v | 成人影视大全 | 免费的精品一区二区三区 | 欧美日韩高清精品一区二区 | 欧美视频一区二区三区 | 国产自产精品一区 | 日本精品不卡中文字幕 | 国产黄在线观看免费观看不卡 | 国产99在线播放免 | 欧美日本国产综合在线 | 国产美女脱的黄的全 | 92在线精品视频 | 欧洲国产小视频在线观看 | 免费观看精品视频999 | 丰满岳乱一区二区三区在线观看 | 免费观看美 |