iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
  • 每個執行環境都有屬於自己的this關鍵字(自然產生)
  • this與函式如何宣告沒有關聯性,僅與呼叫方法有關
  • 嚴格模式下,簡易呼叫會有很大的改變

影響函式 this 的調用方式

  • 作為物件方法(最常運用 this 的方法)
  • 簡易呼叫(絕大多數的呼叫方式)
  • bind, apply, call 方法
  • new
  • DOM 事件處理器
  • 箭頭函式(ES6)


(圖片來源:六角學院)

function callName(){
    console.log(this, this.myName);
}

var family = {
    myName: '小明家',
    callName: callName,
    Ming: {
        myName: '小明',
        callName: callName
    }
}
family.callName();
family.Ming.callName()

回傳:

this 的 call, apply, bind

call、apply、bind 三者都是 JavaScript Function 的內建函式,他們與 this 的關係重大,除此之外,call & apply 可以作為呼叫 Function 的另一個手段,而 bind 則會回傳一個經過包裹後的 Function 回來

全域

例 (call,apply)

function fn(this,part1,part2) {
    console.log(this,part1,part2);
}

fn.call(family,1,2);
fn.apply(family,[3,4]);

因為this會呼叫全域(window)所以會輸出myName:"小明家"

例 (bind)

函式表達式需先呼叫(fn2();)才能執行

var fn2 = fn.bind(family, '小明', '小華');
fn2(); //且不能加入參數

THIS II


上一篇
閉包 Closure
下一篇
THIS II
系列文
JavaScript亂記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言