源码来袭:call、apply手写实现与应用

关于this指向可以了解我的另一篇博客:JavaScript中的this指向规则

 一、call与apply的使用

  • 回顾call与apply的this指向:
var value = "window";
var obj = {
     value:"obj"
}
fonction show(){
     console.log(this.value);   
}
show();//window
show.call(obj);//obj
show(null);//window
  • 回顾call与apply的参数使用:
var sum1 = 1,
     sum2 = 2,
     c = 3,
     obj = {
          c:4
     }
function show(a,b){
     console.log( a + b + this.c);   
}
show(sum1,sum2);//6
show.call(obj,sum1,sum2);//7
show.apply(obj,[sum1,sum2]);//7

 二、call与apply的手写实现

 思路:

show.call(obj);
//代码可以被以下三行代码替代
obj.show = show;
obj.show();
delete = obj.show;

call手写实现:

 1 Function.prototype.MyCall = function(){
 2     var ctx = arguments[0] || window;
 3     ctx.fn = this;
 4     var args = [];
 5     for(var i = 1; i < arguments.length; i++){
 6         args.push(arguments[i]);
 7     }
 8     var result = eval('ctx.fn(' + args.join(",") + ')');
 9     delete ctx.fn;
10     return result;
11 }

apply手写实现:

1 Function.prototype.MyApply = function(obj,arr){
2     var ctx = obj || window;
3     ctx.fn = this;
4     arr = arr || [];
5     eval('ctx.fn(' + arr.join(",") + ')');
6     delete ctx.fn;
7 }

 

转载于:https://www.cnblogs.com/ZheOneAndOnly/p/10419666.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值