Js中一道call函数的面试题

一道call()函数的面试题call()函数能改变this指针的指向,能方便的为对象扩展方法,在实际项目中属于重度应用的方法。下面来看题目: function fn1() {console.log(1);} function fn2() {console.log(2);} fn1.call(fn2); fn1.call.call(fn2); ...
摘要由CSDN通过智能技术生成

一道call()函数的面试题

call()函数能改变this指针的指向,能方便的为对象扩展方法,在实际项目中属于重度应用的方法。

下面来看题目:

    function fn1() {console.log(1);}
    function fn2() {console.log(2);}
    
    fn1.call(fn2);  
    fn1.call.call(fn2); 
    fn1.call.call.call.call(fn2); 
    fn2.call();
    
    Function.prototype.call(fn2); 
    Function.prototype.call.call.call(fn2); 
    Function.prototype.call.call.call(fn1); 
    //Array.prototype.call([1,2,3]); // 所以这样调用会报 TypeError 错误,Array.prototype.call is not a function
  • fn1.call(fn2);
    这样的调用方式大家应该比较熟悉。call()函数的第一个参数应该是对象,fn2是函数,在Js中函数的本质也是对象;所以就是在fn2对象上调用fn1方法(注意fn2上本来是没有fn1这个方法的,调用call时会给fn2临时添加一个属性,它的值就是fn1方法的地址),等同的效果就是直接执行fn1();

  • fn2.call();

  1. call()可以不传参,这时候默认的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值