三者都是改变this执行,不同的是,call和apply是直接生成了函数调用,而bind则是返回了一个函数,你需要再次执行才会达到相同的效果。
call和apply又是因为参数的传递方式不一样,apply传递的是数组,call传递的单个参数的陈列。
bind则是以函数调用参数的方式传递参数。
它们在功能上是没有区别的,都是改变this的指向,它们的区别主要是在于方法的实现形式和参数传递上的不同
①:函数.call(对象,arg1,arg2…)
②:函数.apply(对象,[arg1,arg2,…])
③:var ss=函数.bind(对象,arg1,arg2,…)
通过代码来更加明显的区别一下:
<script type="text/javascript">
function show(sex){
console.log("普通函数"+sex);
}
var person={
name:"小李",
age:18
};
show.call(person,"男");
show.apply(person,["女"]);
//对于bind来说,用法更加的灵活
var ss=show.bind(person,"不明");
ss();
</script>