美文网首页
前端面试之修改this指向

前端面试之修改this指向

作者: Splendid飞羽 | 来源:发表于2021-04-25 21:20 被阅读0次

    第一种:使用call方法 注意arguments对象的参数形式

    
    function bindThis(f, oTarget) {
        let args = [].slice.call(arguments)
        return function () {
            return f.call(oTarget, ...args)
        }
    } 
    //
    

    第二种:使用apply方法

    function bindThis(f, oTarget) {
        return function () {
            let args = [].slice.call(arguments)
            return f.apply(oTarget, args)
        }
    } 
    

    第三种:bind方法 直接绑定this指向

    function bindThis(f, oTarget) {
        return f.bind(oTarget)
    }
    

    第四种:将函数作为对象的方法调用

    function bindThis(f, oTarget) {
        // 使用call、apply、bind方法时,该函数是添加到对象原型上的
        // oTarget.__proto__.fn = f
        oTarget.fn = f
        return function () {
            let args = [].slice.call(arguments)
            return oTarget.fn(...args)
        }
    }
    

    考察点:call,apply和bind的作用和区别?
    相同点:1:都能改变this指向
    2:都能传递参数
    3:都能通过方法"."方法名调用
    不同点:1:函数名不同
    参数传递方式不同(注意看第二个)
    改变this指向的时机不同(bind在复制时改变,其他两个在调用时改变)
    参数传递时机不同(注意看第三个)

    相关文章

      网友评论

          本文标题:前端面试之修改this指向

          本文链接:https://www.haomeiwen.com/subject/ruejrltx.html