改变 this 指向的方式有哪些?区别是什么?
时间: 2024-05-24 10:15:47 浏览: 155
JS中改变this指向的方法(call和apply、bind)
5星 · 资源好评率100%
改变 `this` 指向的方式有以下几种:
1. 使用 `call()` 方法:`call()` 方法可以显式地指定函数中 `this` 的指向,第一个参数即为 `this` 要指向的对象,后面是传递给函数的参数列表。例如:`func.call(thisArg, arg1, arg2, ...)`
2. 使用 `apply()` 方法:`apply()` 方法与 `call()` 方法类似,也可以显式地指定函数中 `this` 的指向,但是参数以数组的形式传递。例如:`func.apply(thisArg, [arg1, arg2, ...])`
3. 使用 `bind()` 方法:`bind()` 方法会返回一个新函数,新函数的 `this` 指向原来的函数调用 `bind()` 方法时传入的第一个参数。例如:`var newFunc = func.bind(thisArg)`
4. 使用箭头函数:箭头函数的 `this` 始终指向它定义时所在的作用域中的 `this`,无法被改变。
这几种方式的主要区别在于它们对函数的执行时机和传参的处理方式不同,除了箭头函数外,其他三种方式都需要在函数执行时才能改变 `this` 的指向。`call()` 和 `apply()` 的区别是参数的传递方式不同,`call()` 以参数列表的形式传递,而 `apply()` 以数组的形式传递。`bind()` 的区别是它会返回一个新函数,不会立即执行原函数,而是在新函数被调用时再执行原函数。
阅读全文