公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

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

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

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

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

?

一、this 的本質(zhì)


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

二、綁定規(guī)則


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

當函數(shù)作為獨立函數(shù)調(diào)用時(非方法、構造函數(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 綁定(構造函數(shù))

使用 new 調(diào)用構造函數(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 的關鍵在于分析函數(shù)的調(diào)用位置調(diào)用方式。通過掌握綁定規(guī)則和優(yōu)先級,可以準確預測代碼行為,避免常見陷阱。


閱讀原文:原文鏈接


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

主站蜘蛛池模板: av无码久久久久久不卡网站 | 成人无码精品一区二区在线 | 国产精品无码av一区二区三区 | 国产三级精品三级在线观看专 | 国产精品高潮av有码久久 | 国产精品亚洲综合的第一页 | 精品少妇av无码免费久久 | 国产白袜脚足j棉 | 国产精品天干天干在线综合 | 国产欧美第一区二区 | 成人国产免费午夜福利片在线 | 国产黄色视频在线观看 | 国产精品亚洲国产在 | 国产午夜视频看看果冻 | 岛国在线观看无码不卡 | 国产丝袜足交视频 | 国产区精品一区二区不卡中文 | 国产日韩久久久久精品影视 | 国产成人精品三级麻豆 | 高清在线一区二区三区 | 国产亚洲成av人片在线观看导航 | 国产精品蜜臂在线观看 | 国产日韩欧美精品先锋 | 91精产国品一二三产区粉粉 | 国产精品国产三级国产成人 | av在线资源网址 | 国产成人精品视频一区二区不卡 | 国产免费无码一区二区三区 | 国产在线线精品 | 精品特级毛片 | 成人亚洲片v一区二区中出片 | 国产成人午夜福利在线观看视频 | 精品无码av一区二区三区不卡 | 精品国产毛片va一区二区三区 | 国产午夜激无码v毛片久久 国产午夜激无码αv毛片久久 | 海角视频在线观看 | 国产女性无遮挡免费裸体视频 | av网站在线观看天堂 | 国产高清无码在线一区二区 | 成人精品一区二区三区校园激情 | 国产激情无码一区二区在线看 |