在没有学到JS高级之前,有很长一段时间我都以为咱们Javascript中的this指向,在函数中仅仅是指向函数的调用者,然后现在回过头来发现自己太傻了 其实函数调用方式也是多样的,那么当然,这个this指向也是多样的
改变函数内部this指向:
JS为我们专门提供了一些函数方法来帮助我们更优雅的处理函数内部this的指向问题,常用的有bind()、call()、apply()三种方法
1.call方法
call()方法调用一个对象,简单理解为调用函数的方式,但是它可以改变函数的this指向。
fun.call(thisArg,arg1,arg2,....)
*thisArg:在fun函数运行时指定的this值
*argsArray:传递的值,必须包含在数组里面
*返回值就是函数的返回值,因为它就是调用函数
2.apply方法
语法:
调用函数.apply(thisArg,argsArray)
thisArg:在func函数运行时使用的this值,this可能不是该方法看到的实际值:如果这个函数处于非严格模式下,则指定为null或undefined时会自动替换为指向全局对象,原始值会被包装
3.bind方法
bind()方法不会调用函数,但是能改变函数内部this指向
语法:
fun.bind(thisArg,arg1,arg2,...)
*thisArg:在fun函数运行时指定的this值
*arg1,arg2:传递的其他参数
*返回由指定的this值和初始化参数改造的原函数拷贝
各自应用场景:
1.call用于做继承
2.apply经常和数组有关系,比如借助于数学对象实现数组最大值最小值
3.bind,不调用函数,但是还想改变this指向,比如改变定时器内部的this指向