欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

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

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

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

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