思路:call()、bind()、apply()的用法,改变this的指向,区别在于:f.bind(obj, arg1, arg2,...)(),bind()方法创建一个新的函数,故需要自己调用;f.call(obj, arg1, arg2...),call()方法在调用函数后会返回函数的执行结果,call可以接受多个参数;f.apply(obj, [arg1, arg2, .]),apply()方法在调用函数后会返回函数的执行结果,apply可以接受一个数组参数列表。故bind直接返回f.bind(oTarget),其本身是一个函数;而call和apply需要返回一个使用function (){}包裹的匿名函数,其中还需要传递参数arguments,其中call是析构...arguments,而apply是直接传递数组arguments。
function bindThis(f, oTarget) { //call()、bind()、apply()的用法,改变this的指向,区别在于 //f.call(obj, arg1, arg2...), //call() 和 apply() 方法在调用函数后会返回函数的执行结果 //return function(){ // return f.call(oTarget,...arguments) //} //bind() 方法创建一个新的函数 //f.bind(obj, arg1, arg2,...)(), //return f.bind(oTarget) //f.apply(obj, [arg1, arg2, .]) return function(){ //以匿名函数形式返回 返回的是函数 如果后面加括号就变成了立即执行函数 return f.apply(oTarget,arguments) } }
总结:call()、bind()、apply()的用法,改变this的指向,区别在于:f.bind(obj, arg1, arg2,...)(),bind()方法创建一个新的函数,故需要自己调用;f.call(obj, arg1, arg2...),call()方法在调用函数后会返回函数的执行结果,call可以接受多个参数;f.apply(obj, [arg1, arg2, .]),apply()方法在调用函数后会返回函数的执行结果,apply可以接受一个数组参数列表。