精品熟人妻一区二区三区四区不卡-精品爽黄69天堂a-精品水蜜桃久久久久久久-精品丝袜国产自在线拍-精品丝袜国产自在线拍a-精品丝袜国产自在线拍免费看

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

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

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

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

?

一、this 的本質


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

二、綁定規(guī)則


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

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

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

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

當函數(shù)作為對象方法調用時,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 綁定(構造函數(shù))

使用 new 調用構造函數(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. 回調函數(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

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

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

3. 類中的 this

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

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.調試技巧:在復雜場景中使用 console.log(this) 快速定位當前值


六、總結


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

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


閱讀原文:原文鏈接


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

主站蜘蛛池模板: 99久久免费精品国产72精品九 | 国产精品青草久久久久福利99 | 亚洲综合国产精品第一页 | 国产日本在线播放 | 精品人妻大屁股白浆无码下载 | 国产一区二区丝袜美腿在线 | 亚洲午夜国产精品日本亚洲欧美在线 | 欧美区精品系列在线观看不卡 | 精品夜色国产国偷自产91 | 无码在线观看三级高清 | 91精产品自偷自偷综合 | 色噜噜狠狠狠狠色综合久一 | 国产精久久一区二区三区 | 精品久久久久久亚洲综合 | 国产人妖网站视频 | 成年人视频免费在线观看 | 国产高清成人片免费播放18禁 | 91视频香蕉黄视频 | 亚洲午夜精品a片一区三区无码 | 香蕉视频在线观看亚洲 | 国产强奷在线墦放免费不卡 | 亚洲日韩精品看片无码 | av天堂午夜精品一区二区三区 | 蜜芽国产成人精品区 | 日韩欧美p片内射久久 | 国产午夜福利100集发布 | 国产成人深夜福利在线观看 | 在线视频免费观看www动漫 | 无套内射极品少妇chinese | 人妻91麻豆一区二区三区 | 91精品国产91久久久久 | 精品久久久久 | 成全影院电视剧在线观看 | 性做久久久久久久久 | 国产良妇出轨视频在线观看 | 精品国产91av自在自线麻豆 | 东京一区二区三区高清视频 | 韩日av无码中文字幕 | 无码自拍日产 | 亚洲第一色片曰本毛片 | 成人黄色网站视频麻豆8 |