JavaScript中的var that = this用法及用途解析

一、What is var that = this?

在JavaScript中,var that = this這個語句經常被用於解決this指向問題。實際上,它的作用是將指向函數對象的this賦值給另一個變量that。這樣,在後續的代碼中,就可以通過that來訪問函數對象了。


function Person(name, age) {
  var that = this; //將this賦值給that
  this.name = name;
  this.age = age;
  this.info = function() {
    console.log(that.name + " is " + that.age + " years old");
  }
}

var person = new Person("Tom", 18);
person.info(); //輸出:Tom is 18 years old

在上面的例子中,that變量被賦值為this,然後在函數中使用that訪問Person對象的屬性,而不是直接使用this。這就解決了this指向問題。

二、Why use var that = this?

1. 解決this指向問題

JavaScript中的this始終指向當前執行上下文的對象,但是在不同的情況下,它指向的對象不同。比如在事件處理函數中,this指向的是觸發事件的元素,而不是函數所在的對象。這時候就可以使用var that = this來解決this指向問題。


var btn = document.getElementById("btn");
btn.onclick = function() {
  var that = this; //解決this指向問題
  setTimeout(function() {
    that.innerHTML = "clicked";
  }, 1000);
}

在上面的例子中,當按鈕被點擊後,setTimeout中的回調函數中的this指向的是window對象,而不是按鈕元素。這時候使用var that = this可以將按鈕元素保存到that變量中,供後續使用。

2. 避免在函數中多次使用this

在JavaScript中,函數中使用this的次數較多,而且在不同的執行上下文中,this指向的對象也不同。這就容易造成混淆和錯誤。在這種情況下,使用var that = this可以避免在函數中多次使用this,使代碼更加清晰和易懂。


var obj = {
  foo: function() {
    var that = this; //避免在函數中多次使用this
    function bar() {
      console.log(that); //輸出:{foo: ƒ}
    }
    bar();
  }
};
obj.foo();

在上面的例子中,bar函數中的this指向的是window對象,而不是obj對象。使用var that = this將this保存到that變量中,可以避免在函數中多次使用this,避免了混淆和錯誤。

3. 解決閉包中的作用域問題

在閉包中,內部函數可以訪問外部函數中定義的變量。但是在外部函數中使用this時,this指向的對象並不是外部函數的對象,而是全局對象或undefined。在這種情況下,使用var that = this可以將外部函數中的this保存到that變量中,以備內部函數使用。


var obj = {
  foo: function() {
    var that = this; //保存外部函數中的this
    function bar() {
      console.log(that); //輸出:{foo: ƒ}
    }
    return bar;
  }
};
var fn = obj.foo();
fn();

在上面的例子中,foo函數返回bar函數。bar函數中使用了外部函數中的this,如果不使用var that = this將this保存到that變量中,bar函數中的this將指向全局對象window,而不是obj對象。

三、Conclusion

在JavaScript中,使用var that = this可以解決this指向問題、避免在函數中多次使用this、以及解決閉包中的作用域問題。它是一種簡單而有效的編程技巧,對編寫清晰、可維護的JavaScript代碼非常有幫助。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/297341.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-28 12:15
下一篇 2024-12-28 12:15

相關推薦

  • 投資組合VAR計算

    本文將從以下幾個方面,系統闡述投資組合VAR計算的相關知識: 一、VAR計算 VAR(Value at Risk)是投資組合風險管理中廣泛使用的一種方法,用于衡量一個投資組合在特定…

    編程 2025-04-29
  • VAR模型是用來幹嘛

    VAR(向量自回歸)模型是一種經濟學中的統計模型,用於分析並預測多個變量之間的關係。 一、多變量時間序列分析 VAR模型可以對多個變量的時間序列數據進行分析和建模,通過對變量之間的…

    編程 2025-04-28
  • 異或什麼意思及其用途

    異或操作是一種比較常見的位運算操作,也稱為「異或運算」,這個運算符用符號「^」表示。它是指對兩個相應位進行邏輯異或,並返回結果。 我們來看下異或的運算規則: 0 ^ 0 = 0 0…

    編程 2025-04-28
  • 使用JavaScript日期函數掌握時間

    在本文中,我們將深入探討JavaScript日期函數,並且從多個視角介紹其應用方法和重要性。 一、日期的基本表示與獲取 在JavaScript中,使用Date對象來表示日期和時間,…

    編程 2025-04-28
  • JavaScript中使用new Date轉換為YYYYMMDD格式

    在JavaScript中,我們通常會使用Date對象來表示日期和時間。當我們需要在網站上顯示日期時,很多情況下需要將Date對象轉換成YYYYMMDD格式的字符串。下面我們來詳細了…

    編程 2025-04-27
  • JavaScript中修改style屬性的方法和技巧

    一、基本概念和方法 style屬性是JavaScript中一個非常重要的屬性,它可以用來控制HTML元素的樣式,包括顏色、大小、字體等等。這裡介紹一些常用的方法: 1、通過Java…

    編程 2025-04-25
  • JavaScript中的Object.getOwnPropertyDescriptors()

    一、簡介 Object.getOwnPropertyDescriptors()是JavaScript中一個非常有用的工具。簡單來說,這個方法可以獲取一個對象上所有自有屬性的屬性描述…

    編程 2025-04-25
  • CloneDeep函數在Javascript開發中的應用

    一、CloneDeep的概念 CloneDeep函數在Javascript中是一種深層克隆對象的方法,可以在拷貝對象時避免出現引用關係。使用者可以在函數中設置可選參數使其滿足多種拷…

    編程 2025-04-25
  • Vue3中的this

    一、this的基本使用 this是Vue實例中非常重要的一個屬性,它代表當前組件實例,常用於引用組件中的數據及方法。 如下面的代碼,在Vue中使用this.message來引用me…

    編程 2025-04-25
  • JavaScript保留整數的完整指南

    JavaScript是一種通用腳本語言,非常適合Web應用程序開發。在處理數字時,JavaScript可以處理整數和浮點數。在本文中,我們將重點關注JavaScript如何保留整數…

    編程 2025-04-25

發表回復

登錄後才能評論