首页 > 试题广场 >

改变函数内部this指针的指向函数(bind,apply,

[问答题]

改变函数内部this指针的指向函数(bind,apply,call的区别)

先说区别:


  • apply 和 call类似,仅在“除第一个参数外的剩余参数”的格式上存在一定差异。call是将剩余所有参数直接罗列进去,而apply则是传递了一个,保存了除第一个参数之外的“其他参数”的数组。这个“其他参数”是要传递给原函数,放在原函数的实参之前,作为原函数的实参,供原函数使用的。
  • bind只接收一个或多个参数,第一个参数用来改变调用者的this指向。剩余参数用法同call
  • bind不像前两者,执行完关键字所在行就立即调用了原函数,而是会返回一个新的函数。只需要在调用新函数时,将剩余参数放入新函数中即可,具体用法下面会介绍。


再说一下适用场合:

当我们需要传递的参数不多时,可以选择call:


fun.call(thisObj, arg1, arg2);

当我们需要传递的参数比较多时,可以先将参数放至一个数组,然后选择apply:


args=[arg1,arg2,arg3...];
fun.apply(thisObj, args);

当我们想要生成一个新的函数长期绑定某个函数给某个对象使用,就可以选择bind:


var newFun = Fun.bind(thisObj);
newFun(arg1,arg2);
编辑于 2022-03-09 08:37:49 回复(0)
改变函数中的this   只能修改普通函数中的this
1)   fn.call(改变后的this指向,参数1,参数2,参数3...)   
        立即执行函数    改变this指向
2)   fn.apply(改变后的this指向,[参数1,参数2,参数3...])
        立即执行函数     改变this指向
3)   fn.bind(改变后的this指向,参数1)(参数2,参数3...)
        返回一个this改变后的新函数
        改变this指向
        不会立即执行

发表于 2022-02-07 11:17:43 回复(0)
<p>apply(),call(),bind()是用来改变this指向的</p><p>apply()和call()用法几乎一样,只是apply是必须以数组的形式传参,而call则是以逗号分隔的形式传参</p><p>bind是直接改变这个函数的this指向并返回一个新的函数。其余的与call一样</p><p>如果call和apply的第一个参数是null或者undefined,那么this的指向则是全局变量,在浏览器里就是window对象</p>
发表于 2020-06-04 15:06:45 回复(0)