call bind的实现以及数组常用方法
1.call 实现(apply 类似)
Function.prototype.call= function(context){
context = context || window;
context.fn = this;
let args =[];
for(let i=1;i<arguments.length;i++){
args.push('arguments[' + i + ']');
}
var result = eval("context.fn( " + args + ")"); // args 会调用toString()方法
delete context.fn; “arguments[1],arguments[2]”
return result;
}
2.bind 实现
Function.prototype.bind = function(context){
let self = this;
let proto = Array.prototype;
let args =proto.slice.call(arguments,1); // 调用bind方法传入的参数
function forBind(){};
forBind.prototype = this.prototype; // 考虑到通过中间对象引用当前方法的原型
let bindfun = function(){
let lateArg = proto.slice.call(arguments); // 调用bind后返回的方法传入的参数
self.apply(context,args.contact(lateArg));
}
bindfun.prototype = new forBind(); // 指向当前方法的原型
return bindfun;
}
3.array的几个常用方法
forEach (遍历数组中的元素)
[1,2,3].forEach(function(item,idx,arr){ //item为每个元素idx为当前元素索引 arr 为当前数组
console.log(item + "--" + idx );
})
map (遍历数组 通过返回的值得到一个新的数组)
let mapArr = [1,2,3].map(function(item,idx,arr){
return item *item;
})
console.log('mapArr---------:',mapArr) // mapArr---------: (3) [1, 4, 9]
filter(遍历数组 将返回为true的元素组成新的数组)
let filterArr=[2,3,4].filter(function(item,idx,arr){
return item %2 ==0;
})
console.log("filterArr----------------:",filterArr) // filterArr----------------: (2) [2, 4]
every(遍历数组 每个元素符合条件返回true时 最终结果才为true)
let everyBool = [1,2,3].every(function(item,idx,arr){
return item >=1;
})
console.log("everyBool----------:",everyBool ) // everyBool----------: true
some(遍历数组 有一个元素符合条件返回true时 最终结果便为true)
let someBool = [1,2,3].some(function(item,idx,arr){
return item >=3;
})
console.log("someBool----------:",someBool) // someBool----------: true
最新文章
- handsontable组件和jqwidgets(jqxdragdrop组件)在一个页面产生调整宽高bug
- iphone6来了,我该做点什么(兼容iphone6的方法)
- asp.net 微信企业号办公系统-流程设计--流程步骤设置-数据设置
- opencv颜色识别代码分享
- Android vector标签 PathData 画图超详解
- UVALive 4222 Dance 模拟题
- Java基础知识强化之网络编程笔记21:Android网络通信之 Android常用OAuth登录(获取令牌信息)
- iOS 图片转NSData-b
- Linux下有线无线网络配置------命令模式
- CFLAGS/CPPFLAGS/CXXFLAGS in Makefile介绍
- html5滑动手势
- Can&#39;t load IA 32-bit .dll on a AMD 64-bit platform
- C#加密与解密
- 如果更新包更新包现场,class文件更新过去,没有改变,及时删掉,照样能进那个模块的问题。
- 关于DLL的学习
- MySQL技术内幕汇总
- iOS学习——iOS原生实现二维码扫描
- React Native之样式
- MangoDB高级应用
- flow-vue.js移动端效果