call方法的使用bug--参数undefined
call/apply是函数原型定义的方法(Function.prorotype),在使用时要注意第一个形参(args[0]),一定是指向函数所要挂载的上下文对象--context,若对象非必须,则要将第一个参数置为null或undefined,不显示传入context,按照call/apply的实现过程,会将其他形参(args[1])作为调用上下文使用,很容易造成其他形参undefined错误,出错场景如下:
function myMatch(str){
var rst = str.replace("{{","").replace("}}","");
return rst;
}
//给Array原型扩展自定义方法
Array.prototype.myEach = function(f){
var rst = [];
for( var i=0;i<this.length;i++ ){
var macther = f.call( this[i]);
//var macther = f(this[i]);
rst.push( macther );
}
return rst;
}
var arr = ["{{name}}","{{age}}"];
console.log( arr );
console.log( arr.myEach( myMatch ) );
出错原因:在调用call的时候,this[i]被当做了挂在上下文context,真正有用的形参如str,则是undefined!
解决方案:
1.在无明显context需求下,可以不用call/apply形式,直接用f(this[i]);
2.无必要使用context,但使用call/apply,请将context置为null/undefined.
最新文章
- java web学习总结(六) -------------------servlet开发(二)
- HTTPS原理详解
- delphi IOS 获取电池信息
- 套路!从Ruby 到 Cocoapods的发布
- jdk+myeclipse配置安装相关步骤
- Could not initialize class sun.awt.X11GraphicsEnvironment
- php中$this、static、final、const、self 等几个关键字的用法
- android4.4内核移植
- InitInheritedComponent的执行过程
- 几个 jQuery 小提示和技巧
- python+request+robot framework接口自动化测试
- PHP学习笔记 02 之文件上传
- Java的常量和变量
- 决AndroidStudio 安卓模拟器安装在D盘问题
- java面向对象编程(七)--四大特征之多态
- python第三十七天--异常--socket
- 《Linux内核设计》第17章学习笔记
- POJ 3421 X-factor Chains (因式分解+排列组合)
- 我的第一个react native
- 机房ping监控 smokeping+prometheus+grafana
热门文章
- 鸡肋的JdbcRDD
- CSS中:overflow:hidden的作用
- HDU 4277 USACO ORZ(暴力+双向枚举)
- debug找到source lookup path以及,debug跑到另外的解决办法
- 64位windows上访问64位oracle 12c
- 2016/3/27 分页 共X条数据 本页x条 本页从x-y条 x/y页 首页 上一页 123456 下一页 末页 pagego echo $page->;fpage(7,6,5,4,3,2,1,0);
- ABAP 检查全角半角
- 网络驱动移植之net_device结构体及其相关的操作函数
- [USACO 2017DEC] Greedy Gift Takers
- 表单中的readOnly 和disabled