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