花门楼前见秋草,岂能贫贱相看老。这篇文章主要讲述源码来袭:callapply手写实现与应用相关的知识,希望能为你提供帮助。
关于this指向可以了解我的另一篇博客:JavaScript中的this指向规则。
一、call与apply的使用
- 回顾call与apply的this指向:
var value = "https://www.songbingjia.com/android/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的手写实现【源码来袭(callapply手写实现与应用)】 思路:
show.call(obj); //代码可以被以下三行代码替代 obj.show = show; obj.show(); delete = obj.show;
call手写实现:
1 Function.prototype.MyCall = function(){ 2var ctx = arguments[0] || window; 3ctx.fn = this; 4var args = []; 5for(var i = 1; i < arguments.length; i++){ 6args.push(arguments[i]); 7} 8var result = eval(\'ctx.fn(\' + args.join(",") + \')\'); 9delete ctx.fn; 10return result; 11 }
apply手写实现:
1 Function.prototype.MyApply = function(obj,arr){ 2var ctx = obj || window; 3ctx.fn = this; 4arr = arr || []; 5eval(\'ctx.fn(\' + arr.join(",") + \')\'); 6delete ctx.fn; 7 }
推荐阅读
- Symbol Table Applications
- Android环境搭建及Ionic打包(win7)
- Spring系列之——springboot解析resources.application.properties文件
- 安卓控制LED驱动编写
- snappy
- UVA - 12113 Overlapping Squares(dfs+回溯)
- android---动画
- 获得APP的包名package和activity
- Jenkins实现自动打包Android(安卓)程序