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

 

你可能感兴趣的:(填坑)