javascript的call,apply和bind

call、apply、bind的异同

相同点

1.都是用来改变函数的this对象的指向的。

2.第一个参数都是this要指向的对象。

3.都可以利用后续参数传参。

不同点

下面我们用具体的代码来对比下三者之间具体的区别


     var obj = {
        name: '5se7en',
        age: '26',
        say: function(){
            console.log(this.name + this.age)
        }
     }
     var obj2 = {
        name: 'wang',
        age: '25'
     }
     obj.say.call(obj2)  //这是call的用法
     obj.say.apply(obj2)  //这是apply的用法
     obj.say.bind(obj2)() //这是bind的用法
    

由上面的例子,我们可以得到bind和call、apply的区别:call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以。那么call和apply有什么区别呢?


     var obj = {
        name: '5se7en',
        age: '26',
        say: function(place, job){
            console.log(this.name + this.age + place + job)
        }
     }
     var obj2 = {
        name: 'wang',
        age: '25'
     }
     obj.say.call(obj2,"shanghai","web")  //这是call的用法
     obj.say.apply(obj2,["shanghai","web"])  //这是apply的用法
     obj.say.bind(obj2,"shanghai","web")() //这是bind的用法
     obj.say.bind(obj2)("shanghai","web") //这是bind的另一种用法