Open jtwang7 opened 2 years ago
本质是改变函数调用的this指向(即函数执行的上下文),形象理解就是将一个对象的内部方法借给另一个对象调用。因此,bind / call / apply 方法的作用对象必须是一个函数(某个对象的方法)。
bind / call / apply
Function.call(obj,[param1[,param2[,…[,paramN]]]])
Function.bind(thisArg[, arg1[, arg2[, ...]]])
Function.apply(obj[,argArray])
call
apply
call()
apply()
bind
call/apply
bind()
JS - bind / call / apply 对比
bind / call / apply 作用
本质是改变函数调用的this指向(即函数执行的上下文),形象理解就是将一个对象的内部方法借给另一个对象调用。因此,
bind / call / apply
方法的作用对象必须是一个函数(某个对象的方法)。区别
Function.call(obj,[param1[,param2[,…[,paramN]]]])
Function.bind(thisArg[, arg1[, arg2[, ...]]])
Function.apply(obj[,argArray])
call
和apply
区别在于参数:call()
从第二个参数开始,可以接收任意个参数。每个参数会映射到相应位置的 Function 的参数上。但是如果将所有的参数作为数组传入,它们会作为一个整体映射到 Function 对应的第一个参数上,之后参数都为空。apply()
第二个参数,必须是数组或者类数组,它们会被转换成类数组,传入 Function 中,并且会被映射到 Function 对应的参数上。bind
和call/apply
的区别在于执行时机:bind()
返回值是函数,并且需要稍后调用,才会执行。而apply()
和call()
则是立即调用。bind()
参数同call()
,从第二个参数开始接收若干参数传入回调函数。