Javascript中this的指向问题

106 阅读1分钟

在没有学到JS高级之前,有很长一段时间我都以为咱们Javascript中的this指向,在函数中仅仅是指向函数的调用者,然后现在回过头来发现自己太傻了 其实函数调用方式也是多样的,那么当然,这个this指向也是多样的

Image.png

改变函数内部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指向