思路: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可以接受一个数组参数列表。



京公网安备 11010502036488号