题目描述
封装函数 f,使 f 的 this 指向指定的对象
思路一
利用bing、call、apply实现。
题解一
function bindThis(f, oTarget) {
return f.bind(oTarget);
}
function bindThis(f, oTarget) {
return function(...arg){
return f.call(oTarget, ...arg);
}
}
function bindThis(f, oTarget) {
return function(...arg){
return f.apply(oTarget, arg);
}
}
思路二
利用bing、call、apply实现一般来说意义不大。而且在很多前端的面试中面试官会要求自己实现。
虽然我也不太清楚实际运用中自己实现是否有实际意义。但是自己实现一遍还是会对this指向的相关知识了解更深,对于了解new过程也会有帮助。
题解二
function bindThis(f, oTarget) {
return function(...arg){
oTarget = oTarget || window;
let fn;
if(oTarget.fn) fn = oTarget.fn;
oTarget.fn = f;
let result = oTarget.fn(...arg);
delete oTarget.fn;
if(fn) oTarget.fn = fn;
return result;
}
}