call/apply/bind的区别

Posted fengshaopu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了call/apply/bind的区别相关的知识,希望对你有一定的参考价值。

一、总结
1.call跟apply跟bind都可以修改this指向
2.call 用于后面是一个一个数据的情况下
3.apply用于后面是数组的情况下
4.bind后面要多加一步()

二、call跟apply跟bind都可以修改this指向

function f(){
    console.log(this.name)
}
var v={
    name:'我是'
}

f.call(v)  //call
f.apply(v)  //apply
f.bind(v)  //bind
 

三、call 用于后面是一个一个数据的情况下

function f(){
console.log(arguments)
Array.prototype.push.call(arguments,100)
}
f(1,5,6)

四、apply用于后面是数组的情况下

function f(){
console.log(arguments)
Array.prototype.push.call(arguments,[1,3,6,9])   //后面是数组的情况下用call的话就不能一个一个的数据放进去了
使用我们要用 apply
Array.prototype.push.apply(arguments,[1,3,6,9])
结果为:
0: 1
1: 5
2: 6
3: 1
4: 3
5: 6
6: 9
}
f(1,5,6)

五.bind后面要多加一步()
bind的话后面得从新调用一个否则就是只修改了this指向


function f(){
console.log(arguments)
Array.prototype.pop.bind(arguments)()
}


f(1,5,6)

结果为:
0: 1
1: 5

以上是关于call/apply/bind的区别的主要内容,如果未能解决你的问题,请参考以下文章

超容易理解的call()apply()bind()的区别

call/apply/bind的区别

JS call,apply, bind区别

call() apply() bind()方法的作用和区别!

call apply bind的区别

js call()apply()bind()的区别和使用