call、apply、bind的区别和用法

126 阅读1分钟

call、apply、bind的区别和用法

1、apply、call、bind的用法

apply、call、bind都可以用来改变this指向

1.1apply()

apply的写法

Function.apply(obj[,argArray])

调用者必须是函数 Function,并且只接收两个参数。

  • 第一个参数,是一个对象。Function的调用者,将会指向这个对象。如果不传,则默认为全局对象 window。
  • 第二个参数,必须是数组或者类数组,它们会被转换成类数组,传入 Function 中,并且会被映射到 Function 对应的参数上。这也是 call 和 apply 之间,很重要的一个区别。

1.2call()

call的写法

Function.call(obj,[param1[,param2[,…[,paramN]]]])
  • 调用 call 的对象,必须是个函数 Function。
  • call 的第一个参数,是一个对象。 Function 的调用者,将会指向这个对象。如果不传,则默认为全局对象 window。
  • 第二个参数开始,可以接收任意个参数。每个参数会映射到相应位置的 Function 的参数上。但是如果将所有的参数作为数组传入,它们会作为一个整体映射到 Function 对应的第一个参数上,之后参数都为空。

1.3bind()

bind的写法

Function.bind(thisArg[, arg1[, arg2[, ...]]])
  • bind 方法的返回值是函数,并且需要稍后调用,才会执行。