1. 程式人生 > >JavaScript繫結this

JavaScript繫結this

問題描述

var a = {
    one: 1,
    haha() {
        console.log(this.one)
    }
}
setTimeout(a.haha, 1000)

在上例中,函式haha引用了this.one,而定時器結束之後呼叫的haha傳入的this並不是a,輸出結果this.one是未定義變數。

方法一:使用箭頭函式的方式設定回撥

var a = {
    one: 1,
    haha() {
        console.log(this.one)
    }
}
setTimeout(() => {
    a.haha()
}, 1000)

方法二:手動指定this

var a = {
    one: 1,
    haha() {
        console.log(this.one)
    }
}

function go(func) {
    func.bind(a).call()
}

go(a.haha)