首頁 > web前端 > js教程 > 為什麼 ES6 箭頭函數中的 `this` 不能如預期般運作?

為什麼 ES6 箭頭函數中的 `this` 不能如預期般運作?

Patricia Arquette
發布: 2024-12-12 12:06:16
原創
279 人瀏覽過

Why Doesn't `this` Work as Expected in ES6 Arrow Functions?

箭頭函數和 this

使用 ES6 在函數中合併屬性時,嘗試存取 this 物件時會出現問題。

var person = {
  name: "jason",

  shout: () => console.log("my name is ", this.name)
}

person.shout() // Should print out my name is jason
登入後複製

但是,執行此程式碼無法包含預期的名稱,僅列印「我的名字是」。這個問題源自於箭頭函數的獨特行為。

箭頭函數缺少綁定 this、參數或其他特殊名稱。建立物件時, this 位於封閉範圍內,而不是在物件內。透過檢查這些變體中的程式碼,問題變得更加明顯:

var person = {
  name: "Jason"
};
person.shout = () => console.log("Hi, my name is", this);
登入後複製

並且,當轉換為ES5 中箭頭語法的模糊近似時:

var person = {
  name: "Jason"
};
var shout = function() {
  console.log("Hi, my name is", this.name);
}.bind(this);
person.shout = shout;
登入後複製

在這兩種情況下,shout 函數的this 指向定義person的作用域,而不是添加到該物件時與該物件關聯的新作用域person.

雖然箭頭函數無法複製預期的行為,但ES6 提供了一種替代解決方案,利用方法聲明模式來節省空間:

var person = {
  name: "Jason",
  // ES6 "method" declaration - leaving off the ":" and the "function"
  shout() {
    console.log("Hi, my name is", this.name);
  }
};
登入後複製

以上是為什麼 ES6 箭頭函數中的 `this` 不能如預期般運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板