bind,call,apply改變this指向問題

this總是指向調用它的那個對象,但指向可以進行改變。

1.bind會改變this指向,但是需要一定條件下才會觸發。如點擊事件

var a = 'window'
var obj = {
    a: 'lee',
        showName: function () {
            alert(this.a)
        }
    }
    document.onclick = obj.showName.bind(window) // 彈出window  改變了this的指向
    // document.onclick = obj.showName.bind(obj) // 彈出lee 
    //只有在點擊的時候才執行,換成call會立即執行

2.call會改變this指向,並且可以傳遞一個參數,立即執行(無論前面有沒有綁定異步事件)

var fun1 = {
        name : 'fun1'
    }
    function fun2(x) {
        // alert(this) // object window
        var name = 'fun2'
        alert(this.name + x)
    }
    fun2.call(fun1, 'x') // fun1x

3.apply會改變this指向,並且可以傳遞一個數組作爲參數,立即執行(無論前面有沒有綁定異步事件)

var fun1 = {
    name: 'fun1'
}
function fun2(x, y) {
    alert(this.name + x + y)
}
fun2.apply(fun1, ['a' , 'b']) // fun1ab

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章