前端大挑战_牛客_FED1——修改this指向

题目描述

封装函数 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;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容