日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

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

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

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

?

一、this 的本質


this 是一個動態綁定的執行上下文對象,指向當前函數運行時的“所有者”。它的值在函數被調用時確定,而非定義時。理解 this 的關鍵在于分析函數是如何被調用的

二、綁定規則


1. 默認綁定(獨立函數調用)

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

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

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

當函數作為對象方法調用時,this 指向調用該方法的對象。

const obj = {  name'Object',  logThis() {    console.log(this.name);  }};
obj.logThis(); // 輸出 "Object"
?? 隱式丟失陷阱:方法被賦值給變量后調用會導致 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 綁定(構造函數)

使用 new 調用構造函數時,this 指向新創建的實例對象。

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

5. 箭頭函數

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

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

三、優先級規則


當多個規則同時適用時,按以下優先級決定 this 指向:

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


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


1. 回調函數中的 this

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

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

2. 嵌套函數中的 this

內部函數不會繼承外部函數的 this(除非使用箭頭函數)

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

3. 類中的 this

類方法中的 this 指向實例對象,但需注意方法作為回調時的綁定問題:

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

五.this的4個實用小技巧


  1. 1.明確綁定:在需要固定 this 指向時,優先使用箭頭函數或 bind

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

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

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


六、總結


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

理解 this 的關鍵在于分析函數的調用位置調用方式。通過掌握綁定規則和優先級,可以準確預測代碼行為,避免常見陷阱。


閱讀原文:原文鏈接


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

主站蜘蛛池模板: 精品国产女主播在线观看 | 把你的香肠放入我的扇贝里 | 国内精品一区 | 小sb几天没做又欠ch | 91tv最新永久在线地址 | 国产精品碰碰现在自在拍 | 欧美国产激情一区二区三区蜜月 | 八戒八戒在线资源网 | 国产一级a毛一级a在线观看 | 中文字幕一区二 | 亚洲熟女乱综合一区二区 | 日韩午夜福利 | 国产精品宾馆精品酒店 | 正版高清视频在线观看 | 日韩欧美一区一本到国产 | 日韩a级一片| 亚洲国产日韩在线人成电影 | 夜爽夜夜网 | 日韩免费影视 | 中文字幕午夜福利片午夜福利片 | 无毒不卡在线观看无需下载 | 嗨嗨影院伦理电影 | 亚洲精品福利在线观看 | 国产视频91尤物在线观看 | 国产91视频网 | 国内自拍小视频 | 精品www日韩熟女 | 国产欧美日韩精品第一区 | 日韩免费码| 中文日产 | 日韩欧美色综合网站免费 | 免费人成视频在线播放视频 | 国产亚洲欧美日韩在线观着 | 亚洲老熟| 日韩欧美性爱视频网站翘臀 | 国产午夜精华2025在线 | 免费观看视频 | 美女视频黄又黄 | 在线天堂中文最新版www网 | 亚洲人成免费网站 | 国产乱子伦对白视频 |