题目描述
封装函数 f,使 f 的 this 指向指定的对象
题解
//来源于牛客网penner
function bindThis(f, oTarget) {
return function(){
oTarget.f=f
return oTarget.f(...arguments)
}
}
官方测试样例
function () {
var r = bindThis(
function (a, b) {
return this.test + a + b;
},//为理解方便,该函数命名为add
{ test: 2 }
)(2, 3);
return r === 7;
}
- 把
add
作为f传入bindThis,{ test: 2 }
作为oTarget - 调用后返回的是一个函数
bindThis(……)
后面跟着的(2,3)
调用了返回后的函数,传入了实参2和3- 将
add
赋给oTarget.f,即{ test: 2 }
的f - 返回
oTarget.f(...arguments)
,也就是调用了{ test : 2 }
的方法add,并且返回该函数的返回值,因此r=2+2+3
arguments
是JavaScript保留字,可以在函数声明没有形参的情况下,接受调用时传递过来的实参。
function 函数名(){} //函数声明没有形参
函数名(实参,实参); //调用的时候有传递实参