js的call函数问题?

改天换地 2017-08-12 08:23:14
function fn1() {
console.log(1)
}
function fn2() {
console.log(2)
}
fn1.call(fn2); //输出1
fn1.call.call(fn2);//不太明白

网上看到call实现的大概思路是
foo.fn = bar
foo.fn()
delete foo.fn

能不能从这个角度解释一下上面的问题啊
...全文
263 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
改天换地 2017-08-13
  • 打赏
  • 举报
回复
改天换地 2017-08-12
  • 打赏
  • 举报
回复
引用 1 楼 zzgzzg00 的回复:
分开看 fn1.call.call(fn2); 先执行.call(fn2) 这时候fn1.call的this是fn2 等同于fn2.call(null) 非严格模式下这时候的this就是window了 所以输出2

function fn1() {
        console.log(1)
    }
    function fn2() {
        console.log(this===window)
        console.log(2)
    }
    fn1.call(fn2);
    fn1.call.call(fn2);
先执行.call(fn2) 这时候fn1.call的this是fn2 等同于fn2.call(null) 这句话还是不太明白额
似梦飞花 2017-08-12
  • 打赏
  • 举报
回复
分开看 fn1.call.call(fn2); 先执行.call(fn2) 这时候fn1.call的this是fn2 等同于fn2.call(null) 非严格模式下这时候的this就是window了 所以输出2

function fn1() {
        console.log(1)
    }
    function fn2() {
        console.log(this===window)
        console.log(2)
    }
    fn1.call(fn2);
    fn1.call.call(fn2);

87,923

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧