apply()方法
1.作用:apply()方法调用一个函数 ,可以改变函数的this指向
2.语法规范:fun.apply(thisArg,[argsArray])
3.参数:
(1)thisArg:在fun函数运行时指定的this值
(2)argsArray:传递的值,必须包含在数组里面
(3)返回值就是函数的返回值
4.主要应用: 可以利用apply借助数学内置对象求最大值
测试代码:
bind()方法
1.作用:bind()方法不会调用函数,但是能改变函数内部this指向
2.语法规范:fun.bind(thisArg,arg1,arg2,…)
3.参数:
(1)thisArg:在fun函数运行时指定的this的值
(2)arg1,arg2:传递的其他参数
(3)返回有指定的this值和初始化参数改造的原函数拷贝【产生一个新的函数】
4.主要应用:如果有的函数不需要立即调用但是又想改变这个内部函数的this指向此时用bind方法
小案例 首先点击按钮后按钮被禁用,然后3秒后可以使用
思路:首先获取按钮元素,然后给按钮元素添加点击事件,给disabled设置true属性
然后设置定时器3秒,并给定时器函数添加bind事件
<script>
var btn=document.querySelector('button')
// 给按钮添加点击事件
btn.addEventListener('click',function(){
this.disabled=true;//这里的this指向window
setTimeout(function(){
this.disabled=false//这里的this指向window
}.bind(this),3000)//这里的this指向btn
})
</script>
call,apply,bind总结
1.相同点:全部可以改变函数内部的this的指向
2.区别点:
(1)call 和apply会调用函数,并且改变函数的内部this指向
(2)bind不会调用函数,但是改变可以this的指向
(3)call和apply传递的参数不一样,call传递参数arg1,arg2…而apply传递的函数是数组形式
3.主要应用场景
(1)call经常做继承
(2)apply经常跟数组有关系,比如借助数学对象实现最大值最小值
(3)bind不会调用函数,但是会改变this指向,比如定时器内部的this指向