iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0
自我挑戰組

轉職仔與JavaScript的初次相遇系列 第 19

JavaScript的this keyword(this關鍵字) - Day19

  • 分享至 

  • xImage
  •  

前言

今天我們將講解JavaScript的this keyword,查看this指向的邏輯為何

說明

this keyword(this關鍵字)

由於this keyword在不同情況下使用會有不同結果
因此若沒有弄懂指向原理,會容易遇到非預期結果

那該如何判斷this keyword指向何處呢?

this keyword不是看該屬性或函式被定義在哪個物件內,而看的是執行當下被誰呼叫

舉例:
情境一:Function (獨立函式)

function name(){
  console.log(this);
}

name(); //會指向全局Object(瀏覽器: "window")

情境二: Object method(物件的方法)

let obj = {
  name: "Jeremy",
  call: function() {
    console.log(this); //物件的方法會指向?
  }
};

obj.call(); //{name: 'Jeremy', call: ƒ} (指向Object本身,this會指向方法所屬的Object)

情境三: Event handle function(事件處理函式)

document.addEventListener('click', function(){
  console.log(this) //document (this會指向接收到Event的元素)
})

情境四: Constructor function(建構函式)

function Name(){
  console.log(this);
}

new Name(); //Name {} (this會指向瀏覽器自動新建的『空白』物件)

既然會產生空白物件,我們即可藉此設定該物件

function Name(){
  console.log(this);
  this.firstName = 'Hung';
  this.lastName = 'Jeremy'; 
}

let newName = new Name();
console.log(newName) 
// Name {} 
//Name {firstName: 'Hung', lastName: 'Jeremy'} (空白物件成功設定firstName和lastName屬性)

簡單彙整(情境vs.指向結果):

情境 this指向
Function Global Object
Object method Method所屬的Object
單獨使用 Global Object
Event handler function 接收到Event的元素
Constructor function 新建立的空白物件

上一篇
JavaScript的Closure(閉包) - Day18
下一篇
JavaScript的Constructor function(建構式函式) - Day20
系列文
轉職仔與JavaScript的初次相遇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言