Vue手写基础代码面试必备

 

 手写 call

call 和 apply 的区别:call 方法接收的是一个参数列表,apply 方法接收的是一个包含多个参数的数组。


1.*context* 存在就使用 *context*,否则是 *window*
2.使用 *Object(context)* 将 *context* 转换成对象,并通过 *context.fn* 将 *this* 指向 *context*
3.循环参数,注意从 1 开始,第 0 个是上下文,后面才是我们需要的参数
4.将参数字符串 *push* 进 *args*
5.字符串和数组拼接时,数组会调用 *toString* 方法,这样可以实现将参数一个个传入,并通过 *eval* 执行
6.拿到结果返回前,删除掉 *fn*


Function.prototype.call = function(context) { 
   context = context ? Object(context) : window;
   context.fn = this;    let args = [];    
   for (let i = 1; i < arguments.length; i++) {        
           args.push('arguments['+ i +']');    
           }    
       let res = eval('context.fn('+ args +')');   
    delete context.fn;    return res;
    }<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值