JavaScript中的call、apply、bind

58 阅读1分钟

pexels-photo-414612.jpeg

作用

这三个方法都可以改变函数体内部的this指向。 关于使用,可以看下下面的简单示例

eg

call

属于function的原型方法(Function.prototype.call),所有function都可以使用。

使用方法

fun.call(thisArg[,arg1[,arg2,…]]);

其中,thisArg就是this指向,arg是指定的参数。参数可以任意多个,用“,”隔开。

call的用处简而言之就是可以让call()中的对象调用当前对象所拥有的function。

指定this 示例

carbon (1).png

call实现继承

carbon (2).png

apply

属于function的原型方法(Function.prototype.call),所有function都可以使用。

使用方法

fun.apply(thisArg, [argsArray]);

其中,thisArg就是this指向,argsArray是指定的参数数组。参数为一个数组。

通过语法就可以看出callapply的在参数上的一个区别:

  • call的参数是一个列表,将每个参数一个个列出来
  • apply的参数是一个数组,将每个参数放到一个数组中

需要注意的地方

apply的第一个参数,也就是this的指向为null时,this会指向window

实现一个apply

  • 绑定上下文

carbon (4).png

  • 给定参数

carbon (5).png

  • 当传入apply的this为null或者为空时

carbon (7).png

bind

bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。

使用方法

fun.bind(thisArg[, arg1[, arg2[, ...]]])

示例

carbon (9).png

总结

  • 三者都是用来改变函数的this指向
  • 三者的第一个参数都是this指向的对象
  • bind是返回一个绑定函数可稍后执行,callapply是立即调用
  • 三者都可以给定参数传递
  • call给定参数需要将参数全部列出,apply给定参数数组