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 方法的返回值是函数,并且需要稍后调用,才会执行。