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

最新文章

  1. handsontable组件和jqwidgets(jqxdragdrop组件)在一个页面产生调整宽高bug
  2. iphone6来了,我该做点什么(兼容iphone6的方法)
  3. asp.net 微信企业号办公系统-流程设计--流程步骤设置-数据设置
  4. opencv颜色识别代码分享
  5. Android vector标签 PathData 画图超详解
  6. UVALive 4222 Dance 模拟题
  7. Java基础知识强化之网络编程笔记21:Android网络通信之 Android常用OAuth登录(获取令牌信息)
  8. iOS 图片转NSData-b
  9. Linux下有线无线网络配置------命令模式
  10. CFLAGS/CPPFLAGS/CXXFLAGS in Makefile介绍
  11. html5滑动手势
  12. Can&#39;t load IA 32-bit .dll on a AMD 64-bit platform
  13. C#加密与解密
  14. 如果更新包更新包现场,class文件更新过去,没有改变,及时删掉,照样能进那个模块的问题。
  15. 关于DLL的学习
  16. MySQL技术内幕汇总
  17. iOS学习——iOS原生实现二维码扫描
  18. React Native之样式
  19. MangoDB高级应用
  20. flow-vue.js移动端效果

热门文章

  1. CentOS 7.6 部署zabbix 6.0 支持Kubernetes
  2. UVM——callback机制应用示例
  3. list变成String类型
  4. linux开放指定端口
  5. Python中Websocket的实现及基本原理
  6. ubuntu18.04 安装cython_bbox
  7. 阿里云centos7搭建docker,拉取镜像外网访问不通的问题排查
  8. 网页识别语音插件annyang可以实现识别中文
  9. flutter 常用ui库
  10. uniapp引入微信小程序自定义视频组件--记录